Skip to content

Commit

Permalink
Feature/sku report (#933)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Pr3d4dor authored Aug 29, 2020
1 parent d65951d commit 8d5f119
Show file tree
Hide file tree
Showing 9 changed files with 384 additions and 9 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
2 changes: 1 addition & 1 deletion application/config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/**
* App current version
*/
$config['app_version'] = '4.12.1';
$config['app_version'] = '4.13.0';

/**
* Nome do sistema
Expand Down
116 changes: 116 additions & 0 deletions application/controllers/Relatorios.php
Original file line number Diff line number Diff line change
Expand Up @@ -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')) {
Expand Down
89 changes: 84 additions & 5 deletions application/models/Relatorios_model.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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();
}
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
}
Expand Down
4 changes: 2 additions & 2 deletions application/views/os/editarOs.php
Original file line number Diff line number Diff line change
Expand Up @@ -394,13 +394,13 @@
<form id="formFaturar" action="<?php echo current_url() ?>" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Faturar Venda</h3>
<h3 id="myModalLabel">Faturar OS</h3>
</div>
<div class="modal-body">
<div class="span12 alert alert-info" style="margin-left: 0"> Obrigatório o preenchimento dos campos com asterisco.</div>
<div class="span12" style="margin-left: 0">
<label for="descricao">Descrição</label>
<input class="span12" id="descricao" type="text" name="descricao" value="Fatura de Venda - #<?php echo $result->idOs; ?> " />
<input class="span12" id="descricao" type="text" name="descricao" value="Fatura de OS - #<?php echo $result->idOs; ?> " />
</div>
<div class="span12" style="margin-left: 0">
<div class="span12" style="margin-left: 0">
Expand Down
70 changes: 70 additions & 0 deletions application/views/relatorios/imprimir/imprimirSKU.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html>

<head>
<title>MAPOS</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/bootstrap-responsive.min.css" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/fullcalendar.css" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/main.css" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/blue.css" class="skin-color" />
</head>

<body style="background-color: transparent">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="widget-box">
<?= $topo ?>
<div class="widget-title">
<h4 style="text-align: center">Produtos</h4>
</div>
<div class="widget-content nopadding">
<table class="table table-bordered">
<thead>
<tr>
<th style="font-size: 1.2em; padding: 5px;">ID Cliente</th>
<th style="font-size: 1.2em; padding: 5px;">Nome Cliente</th>
<th style="font-size: 1.2em; padding: 5px;">ID Produto</th>
<th style="font-size: 1.2em; padding: 5px;">Descrição Produto</th>
<th style="font-size: 1.2em; padding: 5px;">Quantidade</th>
<th style="font-size: 1.2em; padding: 5px;">ID Relacionado</th>
<th style="font-size: 1.2em; padding: 5px;">Data</th>
<th style="font-size: 1.2em; padding: 5px;">Preço Unitário</th>
<th style="font-size: 1.2em; padding: 5px;">Preço Total</th>
<th style="font-size: 1.2em; padding: 5px;">Origem</th>
</tr>
</thead>
<tbody>
<?php
foreach ($resultados as $r) {
echo '<tr>';
echo '<td>' . $r->idClientes . '</td>';
echo '<td>' . $r->nomeCliente . '</td>';
echo '<td>' . $r->idProdutos . '</td>';
echo '<td>' . $r->descricao . '</td>';
echo '<td>' . $r->quantidade . '</td>';
echo '<td>' . $r->idRelacionado . '</td>';
echo '<td>' . date('d/m/Y', strtotime($r->dataOcorrencia)) . '</td>';
echo '<td>' . 'R$ ' . number_format($r->preco, 2, ',', '.') . '</td>';
echo '<td>' . 'R$ ' . number_format($r->precoTotal, 2, ',', '.') . '</td>';
echo '<td>' . $r->origem . '</td>';
echo '</tr>';
}
?>
</tbody>
</table>
</div>
</div>

<h5 style="text-align: right">Data do Relatório: <?php echo date('d/m/Y'); ?>
</h5>
</div>
</div>
</div>
</body>

</html>
Loading

2 comments on commit 8d5f119

@monutb91
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estou tendo problemas com a função XLSXWriter(). Diz que não foi encontrada. Onde ela esta sendo declarada?

image

@RamonSilva20
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olá, atualize as dependências utilizando o composer, provavelmente é isso.

Please sign in to comment.