Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //BUSCANDO AS CLASSES
- include_once __DIR__ . "/Conexao.class.php";
- //DEFININDO FUSO HORÁRIO
- date_default_timezone_set("America/Sao_Paulo");
- class Despesa {
- //ATRIBUTOS
- private $con;
- private $idSequencialDespesa;
- private $idDespesa;
- private $valorDespesa;
- private $dataVencimento;
- private $pago;
- private $dataPagamento;
- private $importante;
- private $tipoRepeticao;
- private $parcelas;
- private $numeroParcela;
- private $recorrente;
- private $observacoes;
- private $idUsuario;
- private $idTipoDespesa;
- private $idTipoPagamento;
- //CONSTRUTOR
- public function __construct() {
- $this->con = new Conexao();
- }
- //GETTERS E SETTERS
- public function setIdSequencialDespesa($idSequencialDespesa) {
- $this->idSequencialDespesa = $idSequencialDespesa;
- }
- public function getIdSequencialDespesa() {
- return $this->idSequencialDespesa;
- }
- public function setIdDespesa($idDespesa) {
- $this->idDespesa = $idDespesa;
- }
- public function getIdDespesa() {
- return $this->idDespesa;
- }
- public function setValorDespesa($valorDespesa) {
- $this->valorDespesa = $valorDespesa;
- }
- public function getValorDespesa() {
- return $this->valorDespesa;
- }
- public function setDataVencimento($dataVencimento) {
- $this->dataVencimento = $dataVencimento;
- }
- public function getDataVencimento() {
- return $this->dataVencimento;
- }
- public function setPago($pago) {
- $this->pago = $pago;
- }
- public function getPago() {
- return $this->pago;
- }
- public function setDataPagamento($dataPagamento) {
- $this->dataPagamento = $dataPagamento;
- }
- public function getDataPagamento() {
- return $this->dataPagamento;
- }
- public function setImportante($importante) {
- $this->importante = $importante;
- }
- public function getImportante() {
- return $this->importante;
- }
- public function setTipoRepeticao($tipoRepeticao) {
- $this->tipoRepeticao = $tipoRepeticao;
- }
- public function getTipoRepeticao() {
- return $this->tipoRepeticao;
- }
- public function setParcelas($parcelas) {
- $this->parcelas = $parcelas;
- }
- public function getParcelas() {
- return $this->parcelas;
- }
- public function setNumeroParcela($numeroParcela) {
- $this->numeroParcela = $numeroParcela;
- }
- public function getNumeroParcela() {
- return $this->numeroParcela;
- }
- public function setRecorrente($recorrente) {
- $this->recorrente = $recorrente;
- }
- public function getRecorrente() {
- return $this->recorrente;
- }
- public function setObservacoes($observacoes) {
- $this->observacoes = $observacoes;
- }
- public function getObversacoes() {
- return $this->observacoes;
- }
- public function setIdUsuario($idUsuario) {
- $this->idUsuario = $idUsuario;
- }
- public function getIdUsuario() {
- return $this->idUsuario;
- }
- public function setIdTipoDespesa($idTipoDespesa) {
- $this->idTipoDespesa = $idTipoDespesa;
- }
- public function getIdTipoDespesa() {
- return $this->idTipoDespesa;
- }
- public function setIdTipoPagamento($idTipoPagamento) {
- $this->idTipoPagamento = $idTipoPagamento;
- }
- public function getIdTipoPagamento() {
- return $this->idTipoPagamento;
- }
- //METODOS
- public function InserirDespesa()
- {
- $proximo_id_despesa = $this->ProximoIdDespesa();
- $sql = "INSERT INTO despesas (id_despesa, valor_despesa, data_vencimento, pago, data_pagamento, importante, tipo_repeticao, parcelas, numero_parcela, recorrente, observacoes, id_usuario, id_tipo_despesa, id_tipo_pagamento) VALUES ";
- $insertQuery = array();
- $insertData = array();
- $n = 0;
- while ($n < $this->parcelas) {
- $this->numeroParcela = $this->numeroParcela + 1;
- $insertQuery[] = "(:id_despesa".$n.", :valor_despesa".$n.", :data_vencimento".$n.", :pago".$n.", :data_pagamento".$n.", :importante".$n.", :tipo_repeticao".$n.", :parcelas".$n.", :numero_parcela".$n.", :recorrente".$n.", :observacoes".$n.", :id_usuario".$n.", :id_tipo_despesa".$n.", :id_tipo_pagamento".$n.")";
- $insertData[":id_despesa".$n] = $proximo_id_despesa;
- $insertData[":valor_despesa".$n] = $this->valorDespesa;
- $insertData[":data_vencimento".$n] = $this->dataVencimento;
- $insertData[":pago".$n] = $this->pago;
- $insertData[":data_pagamento".$n] = $this->dataPagamento;
- $insertData[":importante".$n] = $this->importante;
- $insertData[":tipo_repeticao".$n] = $this->tipoRepeticao;
- $insertData[":parcelas".$n] = $this->parcelas;
- $insertData[":numero_parcela".$n] = $this->numeroParcela;
- $insertData[":recorrente".$n] = $this->recorrente;
- $insertData[":observacoes".$n] = $this->observacoes;
- $insertData[":id_usuario".$n] = $this->idUsuario;
- $insertData[":id_tipo_despesa".$n] = $this->idTipoDespesa;
- $insertData[":id_tipo_pagamento".$n] = $this->idTipoPagamento;
- $this->dataVencimento = date("Y-m-d",(strtotime("next month",strtotime(date($this->dataVencimento)))));
- $n++;
- }
- $sql .= implode(", ", $insertQuery);
- if (!empty($insertQuery)) {
- try {
- $query = $this->con->conectar()->prepare($sql);
- if($query->execute($insertData)) {
- return "Despesa cadastrada com sucesso!";
- } else {
- return "Erro ao tentar cadastrar a despesa!".json_encode($insertData);
- }
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- }
- public function EditarDespesa()
- {
- try {
- if(!empty($this->recorrente)) {
- $n = 0;
- while ($n <= $this->parcelas) {
- $query = $this->con->conectar()->prepare("UPDATE despesas SET valor_despesa = :valor_despesa".$n.", data_vencimento = :data_vencimento".$n.", pago = :pago".$n.", data_pagamento = :data_pagamento".$n.", importante = :importante".$n.", observacoes = :observacoes".$n.", id_tipo_despesa = :id_tipo_despesa".$n.", id_tipo_pagamento = :id_tipo_pagamento".$n." WHERE id_despesa = :id_despesa".$n." AND numero_parcela = :numero_parcela".$n."");
- $query->bindParam(":id_despesa".$n, $this->idDespesa, PDO::PARAM_INT);
- $query->bindParam(":valor_despesa".$n, $this->valorDespesa, PDO::PARAM_STR);
- $query->bindParam(":data_vencimento".$n, $this->dataVencimento, PDO::PARAM_STR);
- $query->bindParam(":pago".$n, $this->pago, PDO::PARAM_INT);
- $query->bindParam(":data_pagamento".$n, $this->dataPagamento, PDO::PARAM_STR);
- $query->bindParam(":importante".$n, $this->importante, PDO::PARAM_INT);
- $query->bindParam(":observacoes".$n, $this->observacoes, PDO::PARAM_STR);
- $query->bindParam(":id_tipo_despesa".$n, $this->idTipoDespesa, PDO::PARAM_INT);
- $query->bindParam(":id_tipo_pagamento".$n, $this->idTipoPagamento, PDO::PARAM_INT);
- $query->bindParam(":numero_parcela".$n, $this->numeroParcela, PDO::PARAM_INT);
- $query->execute();
- $this->numeroParcela = $this->numeroParcela + 1;
- $this->dataVencimento = date("Y-m-d",(strtotime("next month",strtotime(date($this->dataVencimento)))));
- $n++;
- }
- }
- else {
- $query = $this->con->conectar()->prepare("UPDATE despesas SET valor_despesa = :valor_despesa, data_vencimento = :data_vencimento, pago = :pago, data_pagamento = :data_pagamento, importante = :importante, observacoes = :observacoes, id_tipo_despesa = :id_tipo_despesa, id_tipo_pagamento = :id_tipo_pagamento WHERE id_despesa = :id_despesa AND numero_parcela = :numero_parcela");
- $query->bindParam(":id_despesa", $this->idDespesa, PDO::PARAM_INT);
- $query->bindParam(":valor_despesa", $this->valorDespesa, PDO::PARAM_STR);
- $query->bindParam(":data_vencimento", $this->dataVencimento, PDO::PARAM_STR);
- $query->bindParam(":pago", $this->pago, PDO::PARAM_INT);
- $query->bindParam(":data_pagamento", $this->dataPagamento, PDO::PARAM_STR);
- $query->bindParam(":importante", $this->importante, PDO::PARAM_INT);
- $query->bindParam(":observacoes", $this->observacoes, PDO::PARAM_STR);
- $query->bindParam(":id_tipo_despesa", $this->idTipoDespesa, PDO::PARAM_INT);
- $query->bindParam(":id_tipo_pagamento", $this->idTipoPagamento, PDO::PARAM_INT);
- $query->bindParam(":numero_parcela", $this->numeroParcela, PDO::PARAM_INT);
- $query->execute();
- }
- if($query) {
- return "Despesa alterada com sucesso!";
- } else {
- return "Erro ao tentar alterar a despesa!";
- }
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ExcluirDespesa()
- {
- $sql = "DELETE FROM despesas WHERE id_despesa = :id_despesa ";
- $sql .= (!empty($this->recorrente)) ? "AND numero_parcela >= :numero_parcela" : "AND numero_parcela = :numero_parcela";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_despesa", $this->idDespesa, PDO::PARAM_INT);
- $query->bindParam(":numero_parcela", $this->numeroParcela, PDO::PARAM_INT);
- if($query->execute()) {
- return "Despesa deletada com sucesso!";
- } else {
- return "Erro ao tentar deletar a despesa!";
- }
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ProximoIdDespesa()
- {
- try {
- $query = $this->con->conectar()->query("SELECT IFNULL(MAX(id_despesa+1),1) AS proximo_id_despesa FROM despesas");
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function PagarDespesa()
- {
- try {
- $query = $this->con->conectar()->prepare("UPDATE despesas SET data_pagamento = :data_pagamento, pago = 1 WHERE id_sequencial_despesa = :id_sequencial_despesa");
- $query->bindParam(":data_pagamento", $this->dataPagamento, PDO::PARAM_STR);
- $query->bindParam(":id_sequencial_despesa", $this->idSequencialDespesa, PDO::PARAM_INT);
- if($query->execute()) {
- return "Despesa paga com sucesso!";
- } else {
- return "Erro ao tentar pagar a despesa!";
- }
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ListarValorPago()
- {
- $sql = "SELECT IFNULL(FORMAT(SUM(despesas_p),2,'de_DE'),'0,00') AS despesas_p, IFNULL(ROUND(((SUM(despesas_p) / despesas_total)*100),2),0) AS pct_p ";
- $sql .= "FROM (SELECT SUM(dp.valor_despesa) AS despesas_p, (SELECT SUM(d.valor_despesa) ";
- $sql .= "FROM despesas AS d WHERE DATE_FORMAT(d.data_vencimento,'%Y-%m') = DATE_FORMAT(dp.data_vencimento,'%Y-%m') AND d.id_usuario = dp.id_usuario) AS despesas_total ";
- $sql .= "FROM despesas AS dp WHERE dp.pago = 1 AND DATE_FORMAT(dp.data_vencimento,'%Y-%m') = :periodo AND dp.id_usuario = :id_usuario ";
- $sql .= "GROUP BY dp.data_vencimento) AS despesas_pagas";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
- $query->bindParam(":periodo", $this->dataVencimento, PDO::PARAM_STR);
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ListarValorNaoPago()
- {
- $sql = "SELECT IFNULL(FORMAT(SUM(despesas_np),2,'de_DE'),'0,00') AS despesas_np, IFNULL(ROUND(((SUM(despesas_np) / despesas_total)*100),2),0) AS pct_np ";
- $sql .= "FROM (SELECT SUM(dnp.valor_despesa) AS despesas_np, (SELECT SUM(d.valor_despesa) ";
- $sql .= "FROM despesas AS d WHERE DATE_FORMAT(d.data_vencimento,'%Y-%m') = DATE_FORMAT(dnp.data_vencimento,'%Y-%m') AND d.id_usuario = dnp.id_usuario) AS despesas_total ";
- $sql .= "FROM despesas AS dnp WHERE dnp.pago = 0 AND DATE_FORMAT(dnp.data_vencimento,'%Y-%m') = :periodo AND dnp.id_usuario = :id_usuario ";
- $sql .= "GROUP BY dnp.data_vencimento) AS despesas_nao_pagas";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
- $query->bindParam(":periodo", $this->dataVencimento, PDO::PARAM_STR);
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ListarDespesasNaoPagas()
- {
- $sql = "SELECT t.tipo_despesa, d.id_sequencial_despesa, FORMAT(d.valor_despesa,2,'de_DE') AS valor_despesa, DATE_FORMAT(d.data_vencimento, '%d/%m/%Y') AS data_vencimento ";
- $sql .= "FROM tipo_despesa AS t INNER JOIN despesas AS d ON t.id_tipo_despesa = d.id_tipo_despesa ";
- $sql .= "WHERE d.pago = 0 AND d.id_usuario = :id_usuario GROUP BY d.id_sequencial_despesa";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function DetalhesDespesa()
- {
- try {
- $query = $this->con->conectar()->prepare("SELECT * FROM despesas WHERE id_sequencial_despesa = :id_sequencial_despesa");
- $query->bindParam(":id_sequencial_despesa", $this->idSequencialDespesa, PDO::PARAM_INT);
- $query->execute();
- return json_encode($query->fetch(PDO::FETCH_ASSOC));
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ListarCategoriasDespesa()
- {
- $sql = "SELECT c.nome_categoria, t.id_tipo_despesa, FORMAT(SUM(d.valor_despesa),2,'de_DE') AS valor_despesa ";
- $sql .= "FROM categorias AS c INNER JOIN tipo_despesa AS t ON c.id_categoria = t.id_categoria ";
- $sql .= "INNER JOIN despesas AS d ON t.id_tipo_despesa = d.id_tipo_despesa ";
- $sql .= "WHERE DATE_FORMAT(d.data_vencimento,'%Y-%m') = :periodo AND d.id_usuario = :id_usuario GROUP BY c.nome_categoria";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
- $query->bindParam(":periodo", $this->dataVencimento, PDO::PARAM_STR);
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ListarDespesasFiltro()
- {
- $sql = "SELECT d.id_sequencial_despesa, d.id_despesa, FORMAT(d.valor_despesa,2,'de_DE') AS valor_despesa, DATE_FORMAT(d.data_vencimento, '%d/%m/%Y') AS data_vencimento, d.pago, d.data_pagamento, d.importante, d.tipo_repeticao, d.parcelas, d.numero_parcela, d.recorrente, d.observacoes, d.id_usuario, d.id_tipo_despesa, d.id_tipo_pagamento, ";
- $sql .= "td.tipo_despesa, c.nome_categoria, tp.tipo_pagamento ";
- $sql .= "FROM despesas AS d INNER JOIN tipo_despesa AS td ";
- $sql .= "ON d.id_tipo_despesa = td.id_tipo_despesa ";
- $sql .= "INNER JOIN tipo_pagamento AS tp ";
- $sql .= "ON d.id_tipo_pagamento = tp.id_tipo_pagamento ";
- $sql .= "INNER JOIN categorias AS c ";
- $sql .= "ON td.id_categoria = c.id_categoria WHERE YEAR(d.data_vencimento) = YEAR(CURRENT_DATE()) ";
- switch($this->dataVencimento) {
- case "D":
- $sql .= "AND MONTH(d.data_vencimento) = MONTH(CURRENT_DATE()) AND DAY(d.data_vencimento) = DAY(CURRENT_DATE()) ";
- break;
- case "S":
- $sql .= "AND MONTH(d.data_vencimento) = MONTH(CURRENT_DATE()) AND WEEK(d.data_vencimento) = WEEK(CURRENT_DATE()) ";
- break;
- case "M":
- $sql .= "AND MONTH(d.data_vencimento) = MONTH(CURRENT_DATE()) ";
- break;
- case "M1":
- $sql .= "AND MONTH(d.data_vencimento) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH)) ";
- break;
- case "M3":
- $sql .= "AND d.data_vencimento >= CURRENT_DATE() AND d.data_vencimento < CURRENT_DATE() + INTERVAL 90 DAY ";
- break;
- case "M6":
- $sql .= "AND d.data_vencimento >= CURRENT_DATE() AND d.data_vencimento < CURRENT_DATE() + INTERVAL 120 DAY ";
- break;
- case "1M":
- $sql .= "AND MONTH(d.data_vencimento) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH) ";
- break;
- case "3M":
- $sql .= "AND d.data_vencimento BETWEEN (CURRENT_DATE() - INTERVAL 90 DAY) AND CURRENT_DATE() ";
- break;
- case "6M":
- $sql .= "AND d.data_vencimento BETWEEN (CURRENT_DATE() - INTERVAL 120 DAY) AND CURRENT_DATE() ";
- break;
- case "A":
- $sql .= "";
- break;
- default:
- $sql .= "AND MONTH(d.data_vencimento) = MONTH(CURRENT_DATE()) ";
- }
- $sql .= "AND d.id_usuario = :id_usuario ORDER BY d.id_despesa DESC";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- public function ListarUltimasDespesas()
- {
- $sql = "SELECT FORMAT(d.valor_despesa,2,'de_DE') AS valor_despesa, DATE_FORMAT(d.data_vencimento, '%d/%m/%Y') AS data_vencimento, td.tipo_despesa, c.nome_categoria ";
- $sql .= "FROM despesas AS d INNER JOIN tipo_despesa AS td ";
- $sql .= "ON d.id_tipo_despesa = td.id_tipo_despesa ";
- $sql .= "INNER JOIN categorias AS c ";
- $sql .= "ON td.id_categoria = c.id_categoria WHERE id_usuario = :id_usuario GROUP BY d.id_despesa DESC LIMIT 5";
- try {
- $query = $this->con->conectar()->prepare($sql);
- $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
- $query->execute();
- $retorno = array();
- while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
- $retorno[] = $linha;
- }
- return $retorno;
- } catch(PDOException $e) {
- return "Error: ".$e->getMessage();
- }
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement