Skip to content

Commit

Permalink
Correções para ajustar faturar vendas, com logs no auditoria.
Browse files Browse the repository at this point in the history
  • Loading branch information
cabralwms committed Aug 1, 2024
1 parent 99629b8 commit 6d24645
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 66 deletions.
45 changes: 35 additions & 10 deletions application/controllers/Financeiro.php
Original file line number Diff line number Diff line change
Expand Up @@ -548,21 +548,46 @@ public function excluirLancamento()
$id = $this->input->post('id');

if ($id == null || ! is_numeric($id)) {
$json = ['result' => false];
$json = ['result' => false, 'message' => 'ID inválido'];
echo json_encode($json);
} else {
$result = $this->financeiro_model->delete('lancamentos', 'idLancamentos', $id);
if ($result) {
log_info('Removeu um lançamento. ID: ' . $id);
$json = ['result' => true];
echo json_encode($json);
exit();
}

// Começa a transação
$this->db->trans_start();

// Atualiza a tabela vendas, removendo o ID do lançamento e alterando o faturado e status
$this->db->set('lancamentos_id', null);
$this->db->set('faturado', 0);
$this->db->set('status', 'Finalizado');
$this->db->where('lancamentos_id', $id);
$this->db->update('vendas');

// Exclui o lançamento
$result = $this->financeiro_model->delete('lancamentos', 'idLancamentos', $id);

if ($result) {
$this->db->trans_complete();

if ($this->db->trans_status() === FALSE) {
$this->db->trans_rollback();
$this->session->set_flashdata('error', 'Ocorreu um erro ao tentar excluir o lançamento.');
$json = ['result' => false, 'message' => 'Erro na transação'];
} else {
$json = ['result' => false];
echo json_encode($json);
log_info('Excluiu um lançamento. ID: ' . $id);
$this->session->set_flashdata('success', 'Lançamento excluído com sucesso!');
$json = ['result' => true];
}
} else {
$this->db->trans_rollback();
$this->session->set_flashdata('error', 'Ocorreu um erro ao tentar excluir o lançamento.');
$json = ['result' => false, 'message' => 'Erro ao excluir lançamento'];
}
}

echo json_encode($json);
exit();
}

public function autoCompleteClienteFornecedor()
{
if (isset($_GET['term'])) {
Expand Down
153 changes: 97 additions & 56 deletions application/controllers/Vendas.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public function adicionar()
$dataVenda = explode('/', $dataVenda);
$dataVenda = $dataVenda[2] . '-' . $dataVenda[1] . '-' . $dataVenda[0];
} catch (Exception $e) {
$dataVenda = date('Y/m/d');
$dataVenda = date('Y-m-d'); // Corrigido para o formato Y-m-d
}

$data = [
Expand All @@ -98,9 +98,11 @@ public function adicionar()
'garantia' => $this->input->post('garantia')
];

if (is_numeric($id = $this->vendas_model->add('vendas', $data, true))) {
$id = $this->vendas_model->add('vendas', $data, true);

if (is_numeric($id)) {
$this->session->set_flashdata('success', 'Venda iniciada com sucesso, adicione os produtos.');
log_info('Adicionou uma venda.');
log_info('Adicionou uma venda. ID: ' . $id);
redirect(site_url('vendas/editar/') . $id);
} else {
$this->data['custom_error'] = '<div class="form_error"><p>Ocorreu um erro.</p></div>';
Expand Down Expand Up @@ -357,7 +359,7 @@ public function autoCompleteUsuario()

public function adicionarProduto()
{
if (! $this->permission->checkPermission($this->session->userdata('permissao'), 'eVenda')) {
if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'eVenda')) {
$this->session->set_flashdata('error', 'Você não tem permissão para editar vendas.');
redirect(base_url());
}
Expand All @@ -367,8 +369,9 @@ public function adicionarProduto()
$this->form_validation->set_rules('idProduto', 'Produto', 'trim|required');
$this->form_validation->set_rules('idVendasProduto', 'Vendas', 'trim|required');

$editavel = $this->vendas_model->isEditable($this->input->post('idVendasProduto'));
if (! $editavel) {
$idVenda = $this->input->post('idVendasProduto');
$editavel = $this->vendas_model->isEditable($idVenda);
if (!$editavel) {
return $this->output
->set_content_type('application/json')
->set_status_header(422)
Expand All @@ -387,7 +390,7 @@ public function adicionarProduto()
'subTotal' => $subtotal,
'produtos_id' => $produto,
'preco' => $preco,
'vendas_id' => $this->input->post('idVendasProduto'),
'vendas_id' => $idVenda,
];

if ($this->vendas_model->add('itens_de_vendas', $data) == true) {
Expand All @@ -397,13 +400,15 @@ public function adicionarProduto()
$this->produtos_model->updateEstoque($produto, $quantidade, '-');
}

// Atualiza o desconto da venda
$this->db->set('desconto', 0.00);
$this->db->set('valor_desconto', 0.00);
$this->db->set('tipo_desconto', null);
$this->db->where('idVendas', $this->input->post('idVendasProduto'));
$this->db->where('idVendas', $idVenda);
$this->db->update('vendas');

log_info('Adicionou produto a uma venda.');
// Registra a ação nos logs com o ID da venda
log_info('Adicionou produto à venda com ID: ' . $idVenda);

echo json_encode(['result' => true]);
} else {
Expand All @@ -414,40 +419,59 @@ public function adicionarProduto()

public function excluirProduto()
{
if (! $this->permission->checkPermission($this->session->userdata('permissao'), 'eVenda')) {
$this->session->set_flashdata('error', 'Você não tem permissão para editar Vendas');
if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'eVenda')) {
$this->session->set_flashdata('error', 'Você não tem permissão para editar Vendas.');
redirect(base_url());
}

$editavel = $this->vendas_model->isEditable($this->input->post('idVendas'));
if (! $editavel) {
$this->load->library('form_validation');
$this->form_validation->set_rules('idProduto', 'Produto', 'trim|required');
$this->form_validation->set_rules('idVendas', 'Venda', 'trim|required');
$this->form_validation->set_rules('quantidade', 'Quantidade', 'trim|required');
$this->form_validation->set_rules('produto', 'Produto', 'trim|required');

if ($this->form_validation->run() == false) {
echo json_encode(['result' => false, 'messages' => 'Dados inválidos']);
return;
}

$idProduto = $this->input->post('idProduto');
$idVendas = $this->input->post('idVendas');
$quantidade = $this->input->post('quantidade');
$produto = $this->input->post('produto');

$editavel = $this->vendas_model->isEditable($idVendas);
if (!$editavel) {
return $this->output
->set_content_type('application/json')
->set_status_header(422)
->set_output(json_encode(['result' => false, 'messages' => '<br /><br /> <strong>Motivo:</strong> Venda já faturada']));
}

$ID = $this->input->post('idProduto');
if ($this->vendas_model->delete('itens_de_vendas', 'idItens', $ID) == true) {
$quantidade = $this->input->post('quantidade');
$produto = $this->input->post('produto');
$this->db->trans_start();

$this->load->model('produtos_model');
// Exclui o produto
$this->vendas_model->delete('itens_de_vendas', 'idItens', $idProduto);

if ($this->data['configuration']['control_estoque']) {
$this->produtos_model->updateEstoque($produto, $quantidade, '+');
}
if ($this->data['configuration']['control_estoque']) {
$this->load->model('produtos_model');
$this->produtos_model->updateEstoque($produto, $quantidade, '+');
}

$this->db->set('desconto', 0.00);
$this->db->set('valor_desconto', 0.00);
$this->db->set('tipo_desconto', null);
$this->db->where('idVendas', $this->input->post('idVendas'));
$this->db->update('vendas');
// Atualiza a venda
$this->db->set('desconto', 0.00);
$this->db->set('valor_desconto', 0.00);
$this->db->set('tipo_desconto', null);
$this->db->where('idVendas', $idVendas);
$this->db->update('vendas');

log_info('Removeu produto de uma venda.');
echo json_encode(['result' => true]);
if ($this->db->trans_status() === FALSE) {
$this->db->trans_rollback();
echo json_encode(['result' => false, 'messages' => 'Erro ao excluir o produto']);
} else {
echo json_encode(['result' => false]);
$this->db->trans_complete();
log_info('Removeu produto da venda. ID da Venda: ' . $idVendas . ', ID do Produto: ' . $idProduto);
echo json_encode(['result' => true, 'messages' => 'Produto removido com sucesso']);
}
}

Expand Down Expand Up @@ -497,7 +521,7 @@ public function adicionarDesconto()

public function faturar()
{
if (! $this->permission->checkPermission($this->session->userdata('permissao'), 'eVenda')) {
if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'eVenda')) {
$this->session->set_flashdata('error', 'Você não tem permissão para editar Vendas');
redirect(base_url());
}
Expand All @@ -508,9 +532,9 @@ public function faturar()
if ($this->form_validation->run('receita') == false) {
$this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false);
} else {
$venda_id = $this->input->post('vendas_id', true);
$vencimento = $this->input->post('vencimento', true);
$recebimento = $this->input->post('recebimento', true);
$venda_id = $this->input->post('vendas_id');
$vencimento = $this->input->post('vencimento');
$recebimento = $this->input->post('recebimento');

try {
$vencimento = explode('/', $vencimento);
Expand All @@ -525,59 +549,76 @@ public function faturar()
}

$vendas = $this->vendas_model->getById($venda_id);
$valorTotal = $this->input->post('valor', true);
$desconto = $vendas->desconto ? $vendas->desconto : 0;
$valorDesconto = $desconto > 0 ? $valorTotal - $desconto : $valorTotal;

$valorTotal = getAmount($this->input->post('valor'));
$tipoDesconto = $vendas->tipo_desconto;
$valorDesconto = $vendas->desconto;

if ($tipoDesconto == 'percentual') {
$valorDesconto = $valorTotal * ($valorDesconto / 100);
} else {
$valorDesconto = $valorDesconto;
}

$valorDesconto = $valorDesconto > $valorTotal ? $valorTotal : $valorDesconto;

// Se não há desconto, o valor_desconto deve ser igual ao valorTotal
$valorDesconto = $valorTotal - $valorDesconto;
if ($valorDesconto == $valorTotal) {
$valorDesconto = $valorTotal; // Sem desconto
}

$data = [
'vendas_id' => $venda_id,
'descricao' => set_value('descricao'),
'valor' => $valorTotal,
'desconto' => $desconto,
'desconto' => $vendas->desconto,
'tipo_desconto' => $vendas->tipo_desconto,
'valor_desconto' => $valorDesconto,
'clientes_id' => $this->input->post('clientes_id', true),
'clientes_id' => $this->input->post('clientes_id'),
'data_vencimento' => $vencimento,
'data_pagamento' => $recebimento,
'baixado' => $this->input->post('recebido') == 1 ? true : false,
'cliente_fornecedor' => set_value('cliente'),
'forma_pgto' => $this->input->post('formaPgto', true),
'tipo' => $this->input->post('tipo', true),
'forma_pgto' => $this->input->post('formaPgto'),
'tipo' => $this->input->post('tipo'),
'usuarios_id' => $this->session->userdata('id_admin'),
];

$this->db->trans_begin();
$this->db->trans_start();

$this->db->insert('lancamentos', $data);
$idLancamentos = $this->db->insert_id();

if ($this->vendas_model->add('lancamentos', $data)) {
$lancamentos_id = $this->db->insert_id(); // Obtém o ID do lançamento recém-inserido

if ($idLancamentos) {
$this->db->set('faturado', 1);
$this->db->set('valorTotal', $valorTotal);
$this->db->set('lancamentos_id', $lancamentos_id); // Salva o ID do lançamento
$this->db->set('desconto', $vendas->desconto);
$this->db->set('valor_desconto', $valorDesconto);
$this->db->set('lancamentos_id', $idLancamentos);
$this->db->set('status', 'Faturado');
$this->db->where('idVendas', $venda_id);
$this->db->update('vendas');

if ($this->db->trans_status() === false) {
$this->db->trans_rollback();

log_info('Faturou a venda com ID.' . $venda_id);

$this->db->trans_complete();

if ($this->db->trans_status() === FALSE) {
$this->session->set_flashdata('error', 'Ocorreu um erro ao tentar faturar venda.');
$json = ['result' => false];
echo json_encode($json);
exit();
} else {
$this->db->trans_commit();
log_info('Faturou a Venda de ID: ' . $venda_id);
$this->session->set_flashdata('success', 'Venda faturada com sucesso!');
$json = ['result' => true];
echo json_encode($json);
exit();
}
} else {
$this->db->trans_rollback();
$this->session->set_flashdata('error', 'Ocorreu um erro ao tentar faturar venda.');
$json = ['result' => false];
echo json_encode($json);
exit();
}

echo json_encode($json);
exit();
}

$this->session->set_flashdata('error', 'Ocorreu um erro ao tentar faturar venda.');
Expand Down

0 comments on commit 6d24645

Please sign in to comment.