violin101
Members-
Total de itens
290 -
Registro em
-
Última visita
Tudo que violin101 postou
-
Caros amigos, Consegui resolver, foi erro de formatação de valor.
-
obrigado. deu certo, gravou corretamente.
-
Olá amigos, saudações. Após ajuda dos amigos do forum, consegui uma Rotina que estava precisando. Infelizmente após gerar o parcelamento com suas datas de vencimento, quando SALVA no MySql o campo data salva assim 0000-00-00, mesmo contendo datas de vencimentos. Como consigo salvar no campo vencimento as DATAS corretamente ? O Código fico assim: Controller function adicionar() { if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'aLancamento')) { $this->session->set_flashdata('error', 'Você não tem permissão para adicionar lançamento.'); redirect(base_url()); } //Recebe via POST Dados do Lançamento $codEmpr = $this->input->post('idEmp'); $dataLct = $this->input->post('dtaentr'); $notaLct = $this->input->post('num_nf'); //Recebe via POST os Produtos - Entrada de Lançamentos $id_prds = $this->input->post("id_prds"); $qtde = $this->input->post("qtde"); $estoq = $this->input->post("estoq"); $vlrunit = $this->input->post("vlrunit"); $vlrtotal = $this->input->post("vlrtotal"); //Recebe via POST os Parcelamento $dtaprc = $this->input->post("dtaprc"); $vlrprc = $this->input->post("vlrprc"); $idFrnc = $this->input->post('idfornecedor'); $this->load->library('form_validation'); $this->data['custom_error'] = ''; if ($this->form_validation->run('lancamentos') == false) { $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' .validation_errors(). '</div>' : false); } else { $data = array( 'dtalcto' => date('Y-m-d'), 'dtaentr' => $this->input->post('dtaentr'), 'num_nf' => set_value('num_nf'), 'tipo_lcto' => 1, 'id_user' => $this->session->userdata('id'), //pega o ID do Usuário logado 'id_empresas' => $this->input->post('idEmp'), //pega o ID do Empresa logado 'fornecedor_idfornecedor' => $this->input->post('idfornecedor') ); if ($this->lancamentos_model->add('lancamentos', $data) == true) { //Função para Pegar o Último ID do lançamento $numlcto = $this->lancamentos_model->lastID(); //Função para Salvar os Itens do lançamento $this->save_detalhe($id_prds,$qtde,$vlrunit,$vlrtotal,$numlcto); //Função para Salvar Parcelamento $this->save_parcelas($notaLct,$dtaprc,$vlrprc,$idFrnc); //Converte o ID em String $strlcto = strval($numlcto); $strEmpr = strval($codEmpr); $pegEmpr = str_pad($strEmpr, '3', '0', STR_PAD_LEFT); $mostra = 'E-'.$pegEmpr.'.'.$strlcto; //Chama a Função para Alterar o ID do lançamento $this->update_lctos($numlcto,$strlcto,$strEmpr); //Função para Salvar Histórico do Produto $this->save_hist($dataLct,$qtde,$estoq,$mostra,$notaLct,$id_prds,$codEmpr); $this->session->set_flashdata('success', '<h4>Lançamento nº.'.$mostra.' - adicionado com Sucesso.</h4>'); redirect(base_url() . 'admin/lancamentos/visualizar/'.$numlcto); } else { $this->data['custom_error'] = '<div class="form_error"><p><h4>Atenção!!! Ocorreu um erro ao tentar adicionar.</h4></p></div>'; } } $this->load->view('estilo/header', $this->data); $this->load->view('admin/lancamentos/adicionarLancamento'); } //Função para Salvar os Parcelamentos protected function save_parcelas($notaLct,$dtaprc,$vlrprc,$idFrnc){ for ($i=0; $i < count($vlrprc); $i++) { $data = array( 'nunNotafiscal' => $notaLct, 'dataVencimento' => $dtaprc[$i], //aqui salva 0000-00-00 'valorParcela' => $vlrprc[$i], 'id_fornecedor' => $idFrnc, 'id_user'=> $this->session->userdata('id'), ); //Função para Salvar os Detalhes do Parcelamento $this->lancamentos_model->save_parcelas($data); } } public function geraParcelamento() { if ($_SERVER['REQUEST_METHOD'] === 'POST') { $dataInicial = new DateTime($_POST['dataInicial']); $intervalos = explode('/', $_POST['intervalos']); $valorTotal = floatval($_POST['valorTotal']); function gerarParcelas($dataInicial, $intervalos, $valorTotal) { $datasParcelas = []; $quantidadeParcelas = count($intervalos); $valorParcela = floor($valorTotal / $quantidadeParcelas * 100) / 100; $valorUltimaParcela = $valorTotal - ($valorParcela * ($quantidadeParcelas - 1)); for ($i = 0; $i < $quantidadeParcelas; $i++) { if ($i == $quantidadeParcelas - 1) { $valorAtualParcela = $valorUltimaParcela; } else { $valorAtualParcela = $valorParcela; } $dataVencimento = clone $dataInicial; $dataVencimento->modify("+{$intervalos[$i]} days"); $datasParcelas[] = [ 'data_vencimento' => $dataVencimento->format('d/m/Y'), 'valor_parcela' => number_format($valorAtualParcela, 2, ',', '.') ]; } return $datasParcelas; } $parcelas = gerarParcelas($dataInicial, $intervalos, $valorTotal); header('Content-Type: application/json'); echo json_encode($parcelas); } } Models //Salva Parcelamento public function save_parcelas($data){ $this->db->insert("faturamento",$data); } View //Esta função tras correto o parcelamento function gerarParcelas() { const dataInicial = $('#dtaentr').val(); const intervalos = $('#formaPgto').val(); const valorTotal = $('#subtotal').val(); $.ajax({ url: '<?=base_url()?>admin/lancamentos/geraParcelamento', type: 'POST', dataType: 'json', data: { dataInicial: dataInicial, intervalos: intervalos, valorTotal: valorTotal }, success: function(parcelas) { const tbody = $("#tbparcs tbody"); tbody.empty(); // Limpa a tabela antes de adicionar novas linhas parcelas.forEach(function(parcela) { let html = "<tr>"; html += "<td width='10%' height='10'><input type='hidden' name='dtaprc[]' value='"+parcela.data_vencimento +"'>"+parcela.data_vencimento +"</td>"; html += "<td width='32%' height='10'><input type='hidden' name='vlrprc[]' value='"+parcela.valor_parcela+"'>"+parcela.valor_parcela+"</td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-primary btn-editar-parc' style='margin-right: 1%; padding: 1px 2px;' title='Editar'>"+ "<span class='fa fa-edit'></span></button>"+ "<button type='button' class='btn btn-success btn-salvar-parc' style='margin-right: 1%; padding: 1px 5px;' title='Salvar'>"+ "<span class='fa fa-save'></span></button>"+ "</td>"; html += "</tr>"; tbody.append(html); }); } }); }
-
Pessoal, saudações. Por favor, me perdoa em recorrer ao auxílio dos amigos, mas infelizmente estou com uma dúvida e não estou conseguindo resolver. Preciso de ajuda, para criar uma rotina onde o sistema possa Gerar/Calcular vencimentos com períodos variados, ou seja: 00/30/60/90 28/42/56 etc Como faço para o Sistema entender que os PERÍODOS VARIADOS, seja a quantidade de parcelas e vencimentos ? Observação: peço desculpa se postei minha dúvida na postagem errada. Grato, Cesar
-
PHP - Gerar vencimento parcelas com período variado
violin101 respondeu ao tópico de violin101 em PHP
amigo Williams, saudações. tentei assim, sem sucesso function gerarParcelas() { //pega input do form var dataInicial = document.getElementById("dtaentr").value; //SELECT passa com: 28/42/56 var intervalos = document.getElementById("formaPgto").value; //pega input fo form - Soma Total var valorTotal = document.getElementById("vlrtotal").value; var datasParcelas = []; var parcs = explode("/", intervalos); var quantidadeParcelas = count(parcs); // Calcula o valor base das parcelas (arredondando para baixo) var valorParcela = floor(valorTotal / quantidadeParcelas * 100) / 100; // Calcula a última parcela para ajustar a soma total var valorUltimaParcela = valorTotal - (valorParcela * (quantidadeParcelas - 1)); for (i = 0; i < quantidadeParcelas; i++) { if (i == quantidadeParcelas - 1) { valorAtualParcela = valorUltimaParcela; // Última parcela ajustada } else { valorAtualParcela = valorParcela; // Parcelas intermediárias } var dataVencimento = clone dataInicial; dataVencimento->modify("+{parcs[i]} days"); var datasParcelas[] = [ 'data_vencimento' => dataVencimento, 'valor_parcela' => valorAtualParcela ]; } return datasParcelas; } foreach (parcelas as parcela) { html = "<tr>"; html += "<td width='10%' height='10'><input type='hidden' name='datVnc[]' value='"+infoprcs[0]+"'>"+parcela['data_vencimento']->format('Y-m-d')+"</td>"; html += "<td width='32%' height='10'><input type='hidden' name='parcel[]' value='"+infoprcs[2]+"'>"+number_format($parcela['valor_parcela'], 2, ',', '.') +"</td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-danger btn-alterar-parc' style='margin-right: 1%; padding: 1px 2px;' title='Editar'>"+ "</button></td>"; html += "</tr>"; $("#tbparcs tbody").append(html); } -
PHP - Gerar vencimento parcelas com período variado
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações. Desculpa postar novamente minha dúvida. O cálculo de Gerar Parcelamento, se eu fosse colocar essa função dentro de um JAVASCRIPT, como deveria fazer e chamar essa função ? Obs.: para esse cálculo o correto é fora do JAVASCRIPT ? tentei colocar no JS e mostrar em uma TABELA, mas não consegui. Grato, Cesar -
Caros amigos, saudações. Apenas uma pequena dúvida. Precisei realizar uma alteração de Validação de usuário/empresa. Antes essa linha de código estava assim: <input type="hidden" id="idEmps" name="idEmps" value="<?php echo $emprsa->idEmpresas; ?>" /> Precisei colocar [0] para poder localizar a Empresa Logada. <input type="hidden" id="idEmps" name="idEmps" value="<?php echo $emprsa[0]->idEmpresas; ?>" /> Agora, o sistema dá erro e não grava. minha dúvida: qual a função do [0] e como consigo corrigir ? Grato, Cesar
-
Caros amigos, saudações. Estou com uma pequena dúvida, referente a PEGAR AUTOMATICAMENTE a HORA e alimentar o campo INPUT. Tenho uma rotina, que estava aparentemente funcionando corretamente, mas agora estou tendo problema. A rotina, pega a HORA atual e informa automaticamente o INPUT, não estou entendendo porque agora não está mais fazendo. Abaixo a rotina. <div class="col-lg-3"> <label for="cotaHrsinicio">Hora da Abertura<span class="required">*</span></label> <div class="controls"> <input type="time" id="cotaHrsinicio" name="cotaHrsinicio" class="form-control" style="width:100%;" value="" /> <!-- NESSE INPUT A ROTINA INFORMA A DATA ATUAL --> </div> </div> function date_time() { var date = new Date(); //var am_pm = "AM"; var hour = date.getHours(); /* if(hour>=12){ am_pm = "PM"; } */ if (hour == 0) { hour = 12; } if(hour<12){ hour = hour - 12; } if(hour>12){ hour + 12; } if(hour<10){ hour = "0"+hour; } var minute = date.getMinutes(); if (minute<10){ minute = "0"+minute; } var sec = date.getSeconds(); if(sec<10){ sec = "0"+sec; } /* *Formato da Hora (h:m:s) * Passar para a Variável: Hora Atual */ var cotaHrsinicio = document.getElementById("cotaHrsinicio").value = hour+":"+minute; } Grato, Cesar
-
Caros amigos, saudações. Estou com uma dúvida de como devo fazer. Preciso criar uma Rotina para Cadastrar Faturamento, por exemplo: 1) 28/42/56 dias -> de 28 p/ 42 a dif. é de 14 dias... 2) 30/60/90 dias -> de 30 p/ 60 a dif. é de 30 dias... 3) 0/15/30/45 dias -> de 0 p/ 15 a dif. é de 15 dias... Como devo fazer para cadastrar os prazo de vencimento, onde o sistema possa contar as diferenças entre os dias ? Grato, Cesar
-
Amigo Albano, consegui resolver. exclui a Tabela de Relacionamento e inclui novamente.
-
Amigo, Albano, saudações. Tenho um FORM onde o usuário seleciona o Produto para ser Relacionado com outros produtos. O form recebe os DADOS corretamente vindo do MySql, infelizmente quando o usuário Relaciona, os valores passam NULL via ajax, para serem gravados, isso não estou entendo porque está acontece, se antes não ocorria o erro. Abaixo está o código que estou usando. <div class="tab-pane fade" id="relacionamento" role="tabpanel" aria-labelledby="relacionamento-tab"> <div class="txtProd"> <?php echo $result->cod_interno; ?> - <?php echo $result->descricao; ?> </div> <div class="card-body"> <form id="frmRelac" action="javascript:;" method="post" accept-charset="utf-8" enctype="multipart/form-data" > <div class="row"> <div class="col-md-8"> <label for="idProdutos">Produto:</label> <div class="input-group"> <input type="hidden" name="idProdutos" id="idProdutos" value="<?= $result->idProdutos ?>"> <input type="text" class="form-control" id="descritem" name="descritem" style="font-size:15px; font-weight:bold; background:#ffffff;" placeholder="Pesquisar Produto para ser Relacionado" disabled> <span class="input-group-btn"> <button class="btn btn-warning" type="button" id="btnProd" name="btnProd" data-toggle="modal" data-target="#modal_prod"> <span class="fa fa-search"></span> Pesquisar </button> </span> </div> </div> <br/> <div class="col-md-2" style="margin-top:32px;"> <input type="hidden" id="idPrds" name="idPrds" value="<?php echo $result->idProdutos; ?>"/> <input type="hidden" id="idEmps" name="idEmps" value="<?php echo $emprsa[0]->idEmpresas; ?>"/> <button type="submit" id="btn-adic" class="btn btn-success" style="width:100%;"> Relacionar</button> </div> <div class="col-md-2" style="margin-top:32px;"> <button id="btn-limp" class="btn btn-danger" style="width:100%;"> <i class="fa fa-paint-brush icon-white"></i> Limpar </button> </div> <div class="clearfix"></div> <br/> </div> </form> <div class="clearfix"></div> <div class="row"> <div class="col-md-12" id="divRelac" style="padding: 1%; margin-left:0px;"> <table class="table" id="tab_prods"> <thead> <tr style="background-color:#BDDCDC;"> <th style="text-align:center;">CÓDIGO</th> <th style="text-align:center;">DESCRIÇÃO DO PRODUTO</th> <th style="text-align:center;">CATEGORIA</th> <th style="text-align:center;">IMAGEM</th> <th style="text-align:center;">AÇÃO</th> </tr> </thead> <tbody> <?php foreach ($relacto as $rlc) { echo '<tr>'; echo '<td width="20" height="10" style="text-align:center;">'.$rlc->cod_interno.'</td>'; echo '<td width="250" height="10" style="text-align:left;">'.$rlc->descricao.'</td>'; echo '<td width="20" height="10" style="text-align:center;">'.$rlc->categoria.'</td>'; echo '<td width="20" height="10" style="text-align:center;">' ?> <?php if ($rlc->imagemCapa != null) { ?> <img src="<?php echo $rlc->imagemCapa; ?>" width="40px;" height="30px" alt=""> <?php } else { ?> <img src="<?php echo base_url() ?>assets/img/semImg.jpg" width="40px;" height="30px" alt=""> <?php } ?> <?php '</td>'; echo '<td width="20" height="10" style="text-align:center;"><span idExcrlc="'.$rlc->idrelacionar.'" title="Excluir Produto Relacionado" class="btn btn-danger" style="margin-right: 1%; padding: 2px 5px;"><i class="fa fa-trash icon-white"></i></span></td>'; echo '</tr>'; } ?> </tbody> </table> </div> </div> </div> </div> O código em JavaScript, para gravar no MySql. //Adicionar Relacionamento $("#frmRelac").validate({ submitHandler: function (form) { var dados = $(form).serialize(); $("#divRelac").html("<div class='progress'><div class='progress-bar progress-bar-primary progress-bar-striped' role='progressbar' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100' style='width: 100%''></div></div>"); $.ajax({ type: "POST", url: "<?php echo base_url();?>admin/produtos/adicionarRelac", data: dados, dataType: 'json', success: function (data) { if (data.result == true) { $("#divRelac").load("<?php echo current_url();?> #divRelac"); $("#descritem").val(''); //Desabilita os Buttons document.getElementById("btn-adic").disabled = true; document.getElementById("btn-limp").disabled = true; } else { alert('Ocorreu um erro ao tentar adicionar um produto.'); } } }); return false; } }); O result, vem assim do Models function getById($id) { $this->db->where('idProdutos', $id); $this->db->limit(1); return $this->db->get('produtos')->row(); } O amigo, pode me dar uma ajuda. Grato, Cesar
-
Caros amigos, saudações. Por favor, antes de recorrer a ajuda dos amigos, tentei de vários formas mas não consegui sucesso. Preciso criar uma Rotina com Acesso de Login parecido com o do Site Google. Tenho uma rotina que faz as Verificação do Usuário e Senha correto, mas após a verificação do Usuário/Senha, gostaria de ser redirecionado para uma Rotina onde possa Selecionar as Empresas vinculada/permissão para cada usuário, ou seja: o usuário 1 tem permissão para: Empresa 1 | Empresa 2 o usuário 2 tem permissão para: Empresa 2 Abaixo, posto o código que faço a verificação de Usuário/Senha. <!-- Código da VIEW --> <form class="form-vertical" id="formLogin" method="post" action="<?php echo base_url()?>index.php/admin/controle/verificarLogin"> <?php if ($this->session->flashdata('error') != null) {?> <div class="alert alert-danger"> <button type="button" class="close" data-dismiss="alert">×</button> <?php echo $this->session->flashdata('error');?> </div> <?php } ?> <div class="form-group"> <input type="text" id="email" name="email" class="form-control" placeholder="Email"> </div> <div class="form-group"> <input type="password" id="senha" name="senha" class="form-control" placeholder="Password"> </div> <div class="row"> <div class="col-6"> <a href="<?php echo base_url() ?>" class="btn btn-danger btn-block btn-flat"><i class="fa fa-undo"></i> Voltar ao Site</a> </div> <div class="col-6"> <button type="submit" class="btn btn-primary btn-block btn-flat pull-right">Acessar</button> </div> <!-- /.col --> </div> <div class="login-recup"> Esqueceu sua senha: <a href="<?php echo base_url()?>admin/controle/recupera"> clique aqui</a>. </div> </form> //Código no Controller public function index() { if ((!session_id()) || (!$this->session->userdata('logado'))) { redirect('admin/controle/login'); } $this->load->view('estilo/header', $this->data); $this->load->view('admin/tema/topo'); $this->load->view('admin/tema/conteudo'); $this->load->view('estilo/footer'); } public function login() { $this->load->view('admin/controle/login'); } public function verificarLogin() { header('Access-Control-Allow-Origin: '.base_url()); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Content-Type'); $this->load->library('form_validation'); $this->form_validation->set_rules('email', 'E-mail', 'valid_email|required|trim'); $this->form_validation->set_rules('senha', 'Senha', 'required|trim'); if ($this->form_validation->run() == false) { $json = array('result' => false, 'message' => validation_errors()); echo json_encode($json); } else { $email = $this->input->post('email'); $password = $this->input->post('senha'); $this->load->model('Admin/Controle_model'); $user = $this->Controle_model->check_credentials($email); if ($user) { if (password_verify($password, $user->senha)) { $session_data = array('nome' => $user->nome_user, 'email' => $user->email, 'id' => $user->idUsuarios, 'permissao' => $user->permissoes_idPermissao, 'logado' => true); $this->session->set_userdata($session_data); $json = array('result' => true); echo json_encode($json); //$this->envia(); } else { $json = array('result' => false, 'message' => 'Os dados de acesso estão incorretos.'); echo json_encode($json); } } else { $json = array('result' => false, 'message' => 'Usuário não encontrado, verifique se informou os dados corretamente.'); echo json_encode($json); } } die(); } Como faço o redirecionamento para selecionar a Empresa Vinculada, antes de acessar o Sistema ? Grato, Cesar
-
Amigo, Albano. Saudações. Consegui resolver.
-
Amigo, Albano o meu código do JAVASCRIPT está assim, para verificar login. como faço para redirecionar a verificação, conforme informado por você ? <script type="text/javascript"> $(document).ready(function(){ $('#email').focus(); $("#formLogin").validate({ rules :{ email: { required: true, email: true}, senha: { required: true} }, messages:{ email: { required: '<span style="color:#ff0000;">Campo Requerido</span>', email: '<span style="color:#ff0000;">Insira um e-mail válido</span>'}, senha: {required: '<span style="color:#ff0000;">Campo Requerido</span>'} }, submitHandler: function( form ){ var dados = $( form ).serialize(); $('#btn-acessar').addClass('disabled'); $('#progress-acessar').removeClass('hide'); $.ajax({ type: "POST", url: "<?php echo base_url();?>index.php/admin/controle/verificarLogin?ajax=true", data: dados, dataType: 'json', success: function(data) { if(data.result == true){ //Logou Corretamente é redicionado para a página de trabalho window.location.href = "<?php echo base_url();?>admin/controle"; } else { $('#btn-acessar').removeClass('disabled'); $('#progress-acessar').addClass('hide'); $('#call-modal').trigger('click'); } } }); return false; }, errorClass: "help-inline", errorElement: "span", highlight:function(element, errorClass, validClass) { $(element).parents('.form-group').addClass('error'); }, unhighlight: function(element, errorClass, validClass) { $(element).parents('.form-group').removeClass('error'); $(element).parents('.form-group').addClass('success'); } }); }); </SCRIPT>
-
Saudações, amigo Albano. Estive afastado da área de informática por um tempo, por motivo de força maior. É um prazer poder falar com o amigo novamente.
-
PHP - Gerar vencimento parcelas com período variado
violin101 respondeu ao tópico de violin101 em PHP
Obrigado, Williams -
PHP - Gerar vencimento parcelas com período variado
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações Baseado nas suas instruções, fiz escrevi uma Função onde aproxima a última parcela, ou seja: R$ 1000,00 / 3 1 - 333,33 2 - 333,33 3 - 333,34 Como faço para implementar a última parcela para arredondar ? o código fico assim, talvez, tenho colocado no local errado. <?php // Exemplo de uso $dataInicial = new DateTime(); $intervalos = [0,3,6]; $valorTotal = 1000.00; $qtd_parc = count($intervalos); // Converter o valor para o formato Real separado pela virgula echo "Valor da compra: R$ " . number_format($valorTotal, 2, ',', '.') . "<br><br>"; // Apenas Exibi a quantidade de Intervalos echo "Quantidade de intervalos: $qtd_parc <br><br>"; function gerarParcelas($dataInicial, $intervalos, $valorTotal) { $datasParcelas = []; $quantidadeParcelas = count($intervalos); $valorParcela = $valorTotal / $quantidadeParcelas; $repete = 1; $somar_valor_parcela = 0; while ($repete <= $quantidadeParcelas) { if ($repete == $quantidadeParcelas) { $valor_ultima_parcela = $valorTotal - $somar_valor_parcela; $somar_valor_parcela += number_format($valor_ultima_parcela, 2, '.', ''); $valor_final_parcelas = number_format($valor_ultima_parcela, 2, '.', ''); echo "Valor Parc. R$ " . number_format($valor_final_parcelas, 2, ',', '.') . "<br>"; } else { $somar_valor_parcela += number_format($valorParcela, 2, '.', ''); $valor_final_parcela = number_format($valorParcela, 2, '.', ''); echo "Valor Parc. R$ " . number_format($valor_final_parcelas, 2, ',', '.') . "<br>"; } $repete++; } /* Até aqui fica assim. Valor Parc. R$ 333,33 Valor Parc. R$ 333,33 Valor Parc. R$ 333,34 <== arredondou para cima */ foreach ($intervalos as $dias) { $dataVencimento = clone $dataInicial; $dataVencimento->modify("+{$dias} days"); $datasParcelas[] = [ 'data_vencimento' => $dataVencimento, 'valor_parcela' => $valorParcela ]; } return $datasParcelas; } $parcelas = gerarParcelas($dataInicial, $intervalos, $valorTotal); echo "<br>"; foreach ($parcelas as $parcela) { echo $parcela['data_vencimento']->format('Y-m-d') . " - Valor..: R$ " . number_format($parcela['valor_parcela'], 2, ',', '.') . "<br>"; } /* Aqui mostra assim 2024-07-07 - Valor..: R$ 333,33 2024-07-10 - Valor..: R$ 333,33 2024-07-13 - Valor..: R$ 333,33 <== como arredondar esta última parcela */ ?> Grato, Cesar -
PHP - Gerar vencimento parcelas com período variado
violin101 respondeu ao tópico de violin101 em PHP
Amigo, Williams fiz assim e deu certo. //data atual $dataInicial = new DateTime(); //Intervalos de Dias para Vencer $intervalos = [15,30,45]; //Quantidade de Intervalos $qtd_parc = count($intervalos); -
PHP - Gerar vencimento parcelas com período variado
violin101 respondeu ao tópico de violin101 em PHP
Caro amigo, Williams Duarte Muito obrigado por sua explicação e orientação. Apenas uma dúvida: se precisar utilizar os INTERVALOS para fazer a divisão do VALOR parcelado, como ficaria ? exemplo: R$ 1.000,00 intervalos: 28/42/56 dias. Ou nesse caso, o correto seria informa a quantidade de parcelas e depois os intervalos para as datas. -
Caros amigos, saudações. Estou tentando fazer uma Rotina em PHP onde eu possa gerar datas de Vencimentos, o meu problema é que não consigo entender como faço para contar DIFERENÇA entre as data de vencimentos. Exemplo: qtde de dias para vencer: 28/42/56. a 1ª parcela conta 28 dias da Data Atual. a 2ª parcela conta 14 dias da A PARTIR da 1ª. parcela. a 3ª parcela conta 14 dias da A PARTIR da 2ª. parcela. ficaria assim: Data Atual: 03/07/2024 1 vcto p/ 31/07/2024 2 vcto p/ 11/09/2024 3 vcto p/ 25/09/2024 Abaixo fiz uma Rotina Simples, para fazer os PARCELMENTO, VALORES e VECIMENTOS. <?php // Definir um fuso horario padrao date_default_timezone_set('America/Sao_Paulo'); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <title>Calcula Vencimento</title> </head> <body> <?php // Valor da compra $valor_total = 700; // Quantidade de parcelas $quantidade_parc = 3; //Intervalo de Dias para Vencer $intervalo=28; // Converter o valor para o formato Real separado pela virgula echo "Valor da compra: " . number_format($valor_total, 2, ',', '.') . "<br><br>"; // Imprimir a quantidade de parcelas echo "Quantidade de parcelas: $quantidade_parc <br><br>"; // Imprimir a quantidade de parcelas echo "Intervalo de Dias p/ Vencer: $intervalo <br><br>"; // Calcula o valor de cada parcela $valor_parc = $valor_total / $quantidade_parc; // Variável do Controle do WHILE $controle = 1; // Realiza a Sotal das parcelas $soma_valor_parc = 0; // Data atual $data_atual = new DateTime(); // Laço de repetição while ($controle <= $quantidade_parc) { // Somar Intervalo de Tempo na Data $data_atual->add(new DateInterval('P' . $intervalo . 'D')); // Acessa o IF quando é última parcela para corrigir o valor da compra if ($controle == $quantidade_parc) { // Utilizar a soma das parcelas e subtrair do valor total da // para obter o valor a última parcela e corrigir a diferença $valor_ultima_parc = $valor_total - $soma_valor_parc; // Converter o valor da parcela para o formato Real separado pela virgula echo "Valor da parcela " . number_format($valor_ultima_parc, 2, ',', '.') . "<br>"; // Somar o valor das parcelas $soma_valor_parc += number_format($valor_ultima_parc, 2, '.', ''); } else { // Converter o valor da parcela para o formato Real separado pela virgula echo "Valor da parcela " . number_format($valor_parc, 2, ',', '.') . "<br>"; // Somar o valor das parcelas $soma_valor_parc += number_format($valor_parc, 2, '.', ''); } // Converter a data echo "Data de Vencimento: " . $data_atual->format('d/m/Y') . "<br><br>"; // Incrementar a variável após imprimir a parcela $controle++; } // Imprimir o valor total da soma das parcelas e converter para o formato Real separado pela virgula echo "<br>Valor total Parcelado: " . number_format($soma_valor_parc, 2, ',', '.') . "<br>"; ?> </body> </html> Grato, Cesar
-
Caros amigos, saudações... Desculpa recorrer ao grupo mas estou com uma dúvida e não sei como resolver. Tenho uma Rotina onde consigo enviar e-mail usando phpmailer. O problema é que consigo enviar individualmente. Preciso criar uma Rotina onde Busco no MySql todos os usuário que comprou um determinado produto (por exemplo: Notebook). no MySql foi encontrado 10 usuários ou pode ser mais ou menos usuário. Como faço para enviar e-mail a todos os usuários com uma mensagem de agradecimento ? Grato, Cesar
-
Caros amigos, saudações... Estou com uma pequena dúvida para apresentar ao usuário uma Mensagem de ERRO após consulta de CEP. Quando o usuário digita um CEP válido o sistema demonstra em uma TABELA os valores respectivos de FRETE de acordo com os CEP. -----[ até aqui tudo bem ]----- Meu problema é quando o usuário digita um CEP não válido. Nesta parte gostaria de Limpar a Tabela e mostrar uma TBODY de mensagem. <div class="col-md-12" id="divCity" style="display:none; margin-top:5px; margin-left:-23px;"> <div class="col-md-12"> <div class="input-group"> <label for="cidadeUf" class="lblCitys">Cidade:</label> <input type="text" name="cidadeUf" id="cidadeUf" class="form-control" style="margin-top:-17px; background:#ffffff; border: 0 solid #ffffff;" disabled /> </div> </div> <br/> <div class="col-md-12" style="margin-top:-10px; margin-left:10px;"> <div class="table-responsive"> <table class="table tableList" id="tborden"> <thead> <tr> <th colspan="3" style="text-align:left;">Prazo de Entrega para:</th> </tr> </thead> <tbody> <tr class="message"> <td colspan="3" class="text-center">O CEP informado não foi encontrado.</td> </tr> </tbody> </table> </div> </div> <div class="col-md-12" style="margin-top:-10px; margin-left:10px;"> <span class="infprz"> <i class='fa fa-caret-right'></i> Os prazos de Entrega e para Retirar na Loja, iniciam-se no 1º dia útil após a data da confirmação do pagamento. </span> </div> </div> O JavaScript está assim: //Função para Buscar Cidade e Estado Via CEPs. $(function(){ $("#btn_consulta").click(function(){ var cep = $('#cepOrg').val(); if (cep == '') { alert('Informe o CEP antes de continuar'); document.getElementById("divCity").style.display = "none"; $('#cepOrg').focus(); return false; } //Muda o Status do Button $('#btn_consulta').html('Aguarde...'); $.ajax({ url: "<?php echo base_url();?>site/produtos/consulta", type: "POST", dataType:"json", data:{cep: cep}, success:function(data){ if (data.hasOwnProperty('erro')) { /* * Caso o usuário digita um CEP não válido o sistema apresenta um ALERT. * nessa parte gostaria de mostrar a LINHA criada na Tabela anteriormente */ alert('CEP não encontrado'); document.getElementById("divCity").style.display = "none"; $('#cepOrg').val(''); $('#cidadeUf').val(''); $('#cepOrg').focus(); $('#btn_consulta').html('Consultar'); return false; } else { //Exibe os Dados Recebidos $('#cidadeUf').val(data.localidade+'/'+data.uf); //Chama a Função para Exibir a DIV oculta statusDIV(); //Chama a Função Monta Tabela, passando a Variável de Busca montaTable(cep); //Muda o Status do Button $('#btn_consulta').html('Consultar'); } } });//Fim - ajax CEP });//Fim - function button });//Fim - 1º.function function montaTable(cep){ $.ajax({ url: "<?php echo base_url();?>site/produtos/getByCep", type: "POST", dataType:"json", data:{ cep: cep}, success:function(data){ //Remove Mensagem da Tabela $("#tborden tbody tr.message").remove(); var lin = ""; for (var i = 0; i < data.length; i++) { lin += "<tr>"; lin += "<td width='30%' style='text-align:left; font-size:16px;'>" + data[i].cepRegiao + "</td>"; lin += "<td width='21%' style='text-align:left; font-size:16px;'>" + data[i].frtEntreg + "</td>"; if (data[i].vlrFrete != null && data[i].vlrFrete != 0) { lin += "<td width='20%' style='text-align:right; font-size:16px; font-weight:bold; color:#19198F;'>" + mskVlr(data[i].vlrFrete) + "</td>"; } else { lin += "<td width='20%' style='text-align:right; font-size:16px; font-weight:bold; color:#137A13;'>Frete Grátis</td>"; } lin += "</tr>"; } //Atualiza a Tabela $("#tborden tbody").empty(); //Adiciona os Itens a Tabela $("#tborden tbody").append(lin); } });//Fim - ajax Valor Frete } Como consigo executar essa mensagem ? Grato, Cesar
-
Olá amigos, saudações... Feliz 2022 para todos nós. Amigos estou com um problema de Slider, o sistema começa o Carousel de depois de algum tempo o Slider para, mesmo colocando com LOOP infinito. Alguém por favor, poderia me ajudar a entender onde está o problema e como consigo resolver ? O JS está assim: $(".slider-active").owlCarousel({ loop: true, margin: 0, nav: true, autoplay: true, infinite: true, items: 1, autoplayTimeout: 10000, navText: ["<i class='fa fa-caret-left'></i>", "<i class='fa fa-caret-right'></i>"], dots: true, autoHeight: true, lazyLoad: true }); Grato, Cesar
-
Caio Vargas, saudações... Select Box Dinamico usando Ajax <?php /* * * Codeigniter Dynamic Dependent Select Box using Ajax * /* -- -- Database: `country_state_city` -- -- -------------------------------------------------------- -- -- Table structure for table `country` -- CREATE TABLE `country` ( `country_id` int(11) NOT NULL, `country_name` varchar(250) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `country` -- INSERT INTO `country` (`country_id`, `country_name`) VALUES (1, 'USA'), (2, 'Canada'), (3, 'Australia'), (4, 'India'); -- -- Indexes for dumped tables -- -- -- Indexes for table `country` -- ALTER TABLE `country` ADD PRIMARY KEY (`country_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `country` -- ALTER TABLE `country` MODIFY `country_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; -- -- Database: `country_state_city` -- -- -------------------------------------------------------- -- -- Table structure for table `state` -- CREATE TABLE `state` ( `state_id` int(11) NOT NULL, `country_id` int(11) NOT NULL, `state_name` varchar(250) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `state` -- INSERT INTO `state` (`state_id`, `country_id`, `state_name`) VALUES (1, 1, 'New York'), (2, 1, 'Alabama'), (3, 1, 'California'), (4, 2, 'Ontario'), (5, 2, 'British Columbia'), (6, 3, 'New South Wales'), (7, 3, 'Queensland'), (8, 4, 'Karnataka'), (9, 4, 'Telangana'); -- -- Indexes for dumped tables -- -- -- Indexes for table `state` -- ALTER TABLE `state` ADD PRIMARY KEY (`state_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `state` -- ALTER TABLE `state` MODIFY `state_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; -- -- Database: `country_state_city` -- -- -------------------------------------------------------- -- -- Table structure for table `city` -- CREATE TABLE `city` ( `city_id` int(11) NOT NULL, `state_id` int(11) NOT NULL, `city_name` varchar(250) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `city` -- INSERT INTO `city` (`city_id`, `state_id`, `city_name`) VALUES (1, 1, 'New York city'), (2, 1, 'Buffalo'), (3, 1, 'Albany'), (4, 2, 'Birmingham'), (5, 2, 'Montgomery'), (6, 2, 'Huntsville'), (7, 3, 'Los Angeles'), (8, 3, 'San Francisco'), (9, 3, 'San Diego'), (10, 4, 'Toronto'), (11, 4, 'Ottawa'), (12, 5, 'Vancouver'), (13, 5, 'Victoria'), (14, 6, 'Sydney'), (15, 6, 'Newcastle'), (16, 7, 'City of Brisbane'), (17, 7, 'Gold Coast'), (18, 8, 'Bangalore'), (19, 8, 'Mangalore'), (20, 9, 'Hydrabad'), (21, 9, 'Warangal'); -- -- Indexes for dumped tables -- -- -- Indexes for table `city` -- ALTER TABLE `city` ADD PRIMARY KEY (`city_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `city` -- ALTER TABLE `city` MODIFY `city_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=22; */ ?> //-------------------------------------------------------------------------- /* * Dynamic_dependent.php(Controller) */ <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Dynamic_dependent extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('dynamic_dependent_model'); } function index() { $data['country'] = $this->dynamic_dependent_model->fetch_country(); $this->load->view('dynamic_dependent', $data); } function fetch_state() { if($this->input->post('country_id')) { echo $this->dynamic_dependent_model->fetch_state($this->input->post('country_id')); } } function fetch_city() { if($this->input->post('state_id')) { echo $this->dynamic_dependent_model->fetch_city($this->input->post('state_id')); } } } ?> //-------------------------------------------------------------------------- /* * Dynamic_dependent_model.php(Model) */ <?php class Dynamic_dependent_model extends CI_Model { function fetch_country() { $this->db->order_by("country_name", "ASC"); $query = $this->db->get("country"); return $query->result(); } function fetch_state($country_id) { $this->db->where('country_id', $country_id); $this->db->order_by('state_name', 'ASC'); $query = $this->db->get('state'); $output = '<option value="">Select State</option>'; foreach($query->result() as $row) { $output .= '<option value="'.$row->state_id.'">'.$row->state_name.'</option>'; } return $output; } function fetch_city($state_id) { $this->db->where('state_id', $state_id); $this->db->order_by('city_name', 'ASC'); $query = $this->db->get('city'); $output = '<option value="">Select City</option>'; foreach($query->result() as $row) { $output .= '<option value="'.$row->city_id.'">'.$row->city_name.'</option>'; } return $output; } } ?> //-------------------------------------------------------------------------- /* * dynamic_dependent.php(View) */ <html> <head> <title>Codeigniter Dynamic Dependent Select Box using Ajax</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <style> .box { width:100%; max-width: 650px; margin:0 auto; } </style> </head> <body> <div class="container box"> <br /> <br /> <h3 align="center">Codeigniter Dynamic Dependent Select Box using Ajax</h3> <br /> <div class="form-group"> <select name="country" id="country" class="form-control input-lg"> <option value="">Select Country</option> <?php foreach($country as $row) { echo '<option value="'.$row->country_id.'">'.$row->country_name.'</option>'; } ?> </select> </div> <br /> <div class="form-group"> <select name="state" id="state" class="form-control input-lg"> <option value="">Select State</option> </select> </div> <br /> <div class="form-group"> <select name="city" id="city" class="form-control input-lg"> <option value="">Select City</option> </select> </div> </div> </body> </html> <script> $(document).ready(function(){ $('#country').change(function(){ var country_id = $('#country').val(); if(country_id != ''){ $.ajax({ url:"<?php echo base_url(); ?>dynamic_dependent/fetch_state", method:"POST", data:{country_id:country_id}, success:function(data){ $('#state').html(data); $('#city').html('<option value="">Select City</option>'); } }); } else { $('#state').html('<option value="">Select State</option>'); $('#city').html('<option value="">Select City</option>'); } }); $('#state').change(function(){ var state_id = $('#state').val(); if(state_id != ''){ $.ajax({ url:"<?php echo base_url(); ?>dynamic_dependent/fetch_city", method:"POST", data:{state_id:state_id}, success:function(data){ $('#city').html(data); } }); } else { $('#city').html('<option value="">Select City</option>'); } }); }); </script> Espero ter ajudado. Atenciosamente, Cesar
-
Biel, saudações... Embora não colocou a sua rotina para podermos auxiliar em sua dúvida. Vou tentar te ajudar. Para impressão ou qualquer outra rotina que queira usar para não repetir dados, você poder usar a função do MySql: Group By Essa função irá agrupar todos os Campos na sua Base de Dados como por exemplo: id = 1 --- cod: 2 id = 2 --- cod: 1 id = 3 --- cod: 3 id = 4 --- cod: 2 id = 5 --- cod: 1 Explicando o sql: SELECT coluna_nome(s) FROM tabela_nome WHERE condição GROUP BY coluna_nome(s) ORDER BY coluna_nome(s) O Seu SQL ficaria assim: SELECT * FROM produto GROUP BY cod_categoria //aqui vai agrupar todos os campos iguais ORDER BY codprod ASC; //ordem de impressão Espero ter ajudado. Cesar