From 8d5f119674b2e63a76d3fbac7c5a184c72c54558 Mon Sep 17 00:00:00 2001 From: Gianluca Bine Date: Sat, 29 Aug 2020 19:51:19 -0300 Subject: [PATCH] Feature/sku report (#933) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implementado relatório SKU * Corrigido título de modal e descrição de faturamento de OS * Corrigido bug de relatório financeiro rápido omitindo alguns lançamentos e documentação --- CHANGELOG.md | 12 ++ README.md | 2 +- application/config/config.php | 2 +- application/controllers/Relatorios.php | 116 ++++++++++++++++++ application/models/Relatorios_model.php | 89 +++++++++++++- application/views/os/editarOs.php | 4 +- .../views/relatorios/imprimir/imprimirSKU.php | 70 +++++++++++ application/views/relatorios/rel_sku.php | 94 ++++++++++++++ application/views/tema/menu.php | 4 + 9 files changed, 384 insertions(+), 9 deletions(-) create mode 100755 application/views/relatorios/imprimir/imprimirSKU.php create mode 100755 application/views/relatorios/rel_sku.php diff --git a/CHANGELOG.md b/CHANGELOG.md index adfd1c00c..2b8552611 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ Todas as alterações serão documentadas neste arquivo Formato baseado em [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), e [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.13.0] - 2020-08-29 + +## Added +- Implementado relatório SKU. [@Pr3d4dor](https://github.com/Pr3d4dor) + +## Changed +- Adequação para retornar relatórios financeiros ordenados por data de vencimento do lançamento. [@Pr3d4dor](https://github.com/Pr3d4dor) + +## Fixed +- Corrigido título de modal e descrição de faturamento de OS. [@Pr3d4dor](https://github.com/Pr3d4dor) +- Corrigido bug de relatório financeiro rápido omitindo alguns lançamentos. [@Pr3d4dor](https://github.com/Pr3d4dor) + ## [4.12.1] - 2020-08-16 ## Fixed diff --git a/README.md b/README.md index 9cfc87f26..a3d247dce 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![MapOS](https://raw.githubusercontent.com/RamonSilva20/mapos/master/assets/img/logo.png) -![version](https://img.shields.io/badge/version-4.12.1-blue.svg?longCache=true&style=flat-square) +![version](https://img.shields.io/badge/version-4.13.0-blue.svg?longCache=true&style=flat-square) ![license](https://img.shields.io/badge/license-MIT-green.svg?longCache=true&style=flat-square) ![theme](https://img.shields.io/badge/theme-Matrix--Admin-lightgrey.svg?longCache=true&style=flat-square) ![issues](https://img.shields.io/github/issues/RamonSilva20/mapos.svg?longCache=true&style=flat-square) diff --git a/application/config/config.php b/application/config/config.php index 26ee71eda..c47eef4f3 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -4,7 +4,7 @@ /** * App current version */ -$config['app_version'] = '4.12.1'; +$config['app_version'] = '4.13.0'; /** * Nome do sistema diff --git a/application/controllers/Relatorios.php b/application/controllers/Relatorios.php index a6959bc02..ad6a66c1e 100644 --- a/application/controllers/Relatorios.php +++ b/application/controllers/Relatorios.php @@ -198,6 +198,122 @@ public function produtosEtiquetas() } } + public function sku() + { + if (!($this->permission->checkPermission($this->session->userdata('permissao'), 'rVenda') + && $this->permission->checkPermission($this->session->userdata('permissao'), 'rOs'))) { + $this->session->set_flashdata('error', 'Você não tem permissão para gerar relatório SKU.'); + redirect(base_url()); + } + + $this->data['view'] = 'relatorios/rel_sku'; + return $this->layout(); + } + + public function skuRapid() + { + if (!($this->permission->checkPermission($this->session->userdata('permissao'), 'rVenda') + && $this->permission->checkPermission($this->session->userdata('permissao'), 'rOs'))) { + $this->session->set_flashdata('error', 'Você não tem permissão para gerar relatório SKU.'); + redirect(base_url()); + } + + $format = $this->input->get('format'); + + if ($format == 'xls') { + $vendas = $this->Relatorios_model->skuRapid(true); + + $cabecalho = [ + 'ID Cliente' => 'integer', + 'Nome Cliente' => 'string', + 'ID Produto' => 'integer', + 'Descrição Produto' => 'string', + 'Quantidade' => 'integer', + 'ID Relacionado' => 'integer', + 'Data' => 'YYYY-MM-DD', + 'Preço Unitário' => 'price', + 'Preço Total' => 'price', + 'Origem' => 'string' + ]; + + $writer = new XLSXWriter(); + + $writer->writeSheetHeader('Sheet1', $cabecalho); + foreach ($vendas as $venda) { + $writer->writeSheetRow('Sheet1', $venda); + } + + $arquivo = $writer->writeToString(); + $this->load->helper('download'); + force_download('relatorio_sku.xlsx', $arquivo); + + return; + } + + $data['resultados'] = $this->Relatorios_model->skuRapid(); + $data['emitente'] = $this->Mapos_model->getEmitente(); + $data['title'] = 'Relatório SKU'; + $data['topo'] = $this->load->view('relatorios/imprimir/imprimirTopo', $data, true); + + $this->load->helper('mpdf'); + $html = $this->load->view('relatorios/imprimir/imprimirSKU', $data, true); + pdf_create($html, 'relatorio_produtos' . date('d/m/y'), true); + } + + public function skuCustom() + { + if (!($this->permission->checkPermission($this->session->userdata('permissao'), 'rVenda') + && $this->permission->checkPermission($this->session->userdata('permissao'), 'rOs'))) { + $this->session->set_flashdata('error', 'Você não tem permissão para gerar relatório SKU.'); + redirect(base_url()); + } + + $dataInicial = $this->input->get('dataInicial'); + $dataFinal = $this->input->get('dataFinal'); + $cliente = $this->input->get('clientes_id'); + $format = $this->input->get('format'); + $origem = $this->input->get('origem'); + + if ($format == 'xls') { + $vendas = $this->Relatorios_model->skuCustom($dataInicial, $dataFinal, $cliente, $origem, true); + + $cabecalho = [ + 'ID Cliente' => 'integer', + 'Nome Cliente' => 'string', + 'ID Produto' => 'integer', + 'Descrição Produto' => 'string', + 'Quantidade' => 'integer', + 'ID Relacionado' => 'integer', + 'Data' => 'YYYY-MM-DD', + 'Preço Unitário' => 'price', + 'Preço Total' => 'price', + 'Origem' => 'string' + ]; + + $writer = new XLSXWriter(); + + $writer->writeSheetHeader('Sheet1', $cabecalho); + foreach ($vendas as $venda) { + $writer->writeSheetRow('Sheet1', $venda); + } + + $arquivo = $writer->writeToString(); + $this->load->helper('download'); + force_download('relatorio_sku.xlsx', $arquivo); + + return; + } + + $data['resultados'] = $this->Relatorios_model->skuCustom($dataInicial, $dataFinal, $cliente, $origem); + $data['emitente'] = $this->Mapos_model->getEmitente(); + $data['title'] = 'Relatório SKU'; + $data['topo'] = $this->load->view('relatorios/imprimir/imprimirTopo', $data, true); + + $this->load->helper('mpdf'); + $html = $this->load->view('relatorios/imprimir/imprimirSKU', $data, true); + pdf_create($html, 'relatorio_produtos' . date('d/m/y'), true); + } + public function servicos() { if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'rServico')) { diff --git a/application/models/Relatorios_model.php b/application/models/Relatorios_model.php index f248b288b..8b31005c3 100644 --- a/application/models/Relatorios_model.php +++ b/application/models/Relatorios_model.php @@ -131,6 +131,82 @@ public function produtosEtiquetas($de, $ate) return $this->db->query($query)->result(); } + public function skuRapid($array = false) + { + $this->db->select('clientes.idClientes, clientes.nomeCliente, produtos.idProdutos, produtos.descricao, itens_de_vendas.quantidade, vendas.idVendas as idRelacionado, vendas.dataVenda as dataOcorrencia, itens_de_vendas.preco, (itens_de_vendas.preco * itens_de_vendas.quantidade) as precoTotal, "venda" as origem'); + $this->db->from('vendas'); + $this->db->join('itens_de_vendas', 'vendas.idVendas = itens_de_vendas.vendas_id'); + $this->db->join('clientes', 'clientes.idClientes = vendas.clientes_id'); + $this->db->join('produtos', 'produtos.idProdutos = itens_de_vendas.produtos_id'); + $subQuery1 = $this->db->get_compiled_select(); + $this->db->reset_query(); + + $this->db->select('clientes.idClientes, clientes.nomeCliente, produtos.idProdutos, produtos.descricao, produtos_os.quantidade, os.idOs as idRelacionado, os.dataInicial as dataOcorrencia, produtos_os.preco , (produtos_os.preco * produtos_os.quantidade) as precoTotal, "os" as origem'); + $this->db->from('os'); + $this->db->join('produtos_os', 'produtos_os.os_id = os.idOs'); + $this->db->join('clientes', 'clientes.idClientes = os.clientes_id'); + $this->db->join('produtos', 'produtos.idProdutos = produtos_os.produtos_id'); + $subQuery2 = $this->db->get_compiled_select(); + $this->db->reset_query(); + + $query = $this->db->query("SELECT * FROM ($subQuery1 UNION $subQuery2) as result ORDER BY dataOcorrencia DESC"); + if ($array) { + return $query->result_array(); + } + + return $query->result(); + } + + public function skuCustom($dataInicial = null, $dataFinal = null, $cliente = null, $origem = null, $array = false) + { + $this->db->select('clientes.idClientes, clientes.nomeCliente, produtos.idProdutos, produtos.descricao, itens_de_vendas.quantidade, vendas.idVendas as idRelacionado, vendas.dataVenda as dataOcorrencia, itens_de_vendas.preco, (itens_de_vendas.preco * itens_de_vendas.quantidade) as precoTotal, "venda" as origem'); + $this->db->from('vendas'); + $this->db->join('itens_de_vendas', 'vendas.idVendas = itens_de_vendas.vendas_id'); + $this->db->join('clientes', 'clientes.idClientes = vendas.clientes_id'); + $this->db->join('produtos', 'produtos.idProdutos = itens_de_vendas.produtos_id'); + $subQuery1 = $this->db->get_compiled_select(); + $this->db->reset_query(); + + $this->db->select('clientes.idClientes, clientes.nomeCliente, produtos.idProdutos, produtos.descricao, produtos_os.quantidade, os.idOs as idRelacionado, os.dataInicial as dataOcorrencia, produtos_os.preco , (produtos_os.preco * produtos_os.quantidade) as precoTotal, "os" as origem'); + $this->db->from('os'); + $this->db->join('produtos_os', 'produtos_os.os_id = os.idOs'); + $this->db->join('clientes', 'clientes.idClientes = os.clientes_id'); + $this->db->join('produtos', 'produtos.idProdutos = produtos_os.produtos_id'); + $subQuery2 = $this->db->get_compiled_select(); + $this->db->reset_query(); + + $query = " + CREATE TEMPORARY TABLE IF NOT EXISTS results + (SELECT * FROM ($subQuery1 UNION $subQuery2) as unionTable) + "; + $this->db->query($query); + + $this->db->from("results"); + $this->db->order_by("dataOcorrencia", "desc"); + if ($dataInicial) { + $this->db->where('dataOcorrencia >=', $dataInicial); + } + + if ($dataFinal) { + $this->db->where('dataOcorrencia <=', $dataFinal); + } + + if ($cliente) { + $this->db->where('idClientes =', $cliente); + } + + if ($origem) { + $this->db->where('origem =', $origem); + } + + $result = $this->db->get(); + if ($array) { + return $result->result_array(); + } + + return $result->result(); + } + public function servicosRapid() { $this->db->order_by('nome', 'asc'); @@ -202,11 +278,13 @@ public function osCustom($dataInicial = null, $dataFinal = null, $cliente = null public function financeiroRapid($array = false) { - $dataInicial = date('Y-m-01'); - $dataFinal = date("Y-m-t"); - $query = "SELECT * FROM lancamentos WHERE data_vencimento BETWEEN ? and ? ORDER BY tipo"; + $primeiroDiaMes = new \DateTime('first day of this month'); + $ultimodiaMes = new DateTime('last day of this month'); - $result = $this->db->query($query, [$dataInicial, $dataFinal]); + $this->db->where('data_vencimento >=', $primeiroDiaMes->format('Y-m-d')); + $this->db->where('data_vencimento <=', $ultimodiaMes->format('Y-m-d')); + $this->db->order_by('data_vencimento', 'asc'); + $result = $this->db->get('lancamentos'); if ($array) { return $result->result_array(); } @@ -237,6 +315,7 @@ public function financeiroCustom($dataInicial = null, $dataFinal = null, $tipo = } } + $this->db->order_by('data_vencimento', 'asc'); $result = $this->db->get('lancamentos'); if ($array) { return $result->result_array(); @@ -276,7 +355,7 @@ public function vendasCustom($dataInicial = null, $dataFinal = null, $cliente = $whereResponsavel = "AND usuarios_id = " . $this->db->escape($responsavel); } - $query = "SELECT vendas.*,clientes.nomeCliente,usuarios.nome FROM vendas LEFT JOIN clientes ON vendas.clientes_id = clientes.idClientes LEFT JOIN usuarios ON vendas.usuarios_id = usuarios.idUsuarios WHERE idVendas != 0 $whereData $whereCliente $whereResponsavel ORDER BY vendas.dataVEnda"; + $query = "SELECT vendas.*,clientes.nomeCliente,usuarios.nome FROM vendas LEFT JOIN clientes ON vendas.clientes_id = clientes.idClientes LEFT JOIN usuarios ON vendas.usuarios_id = usuarios.idUsuarios WHERE idVendas != 0 $whereData $whereCliente $whereResponsavel ORDER BY vendas.dataVenda"; return $this->db->query($query)->result(); } diff --git a/application/views/os/editarOs.php b/application/views/os/editarOs.php index 8268357c0..83815d6c6 100644 --- a/application/views/os/editarOs.php +++ b/application/views/os/editarOs.php @@ -394,13 +394,13 @@