Gerar Mensalidade Boa noite! Galera estou precisando de ajuda quem poderia mim ajudar, não consigo gerar as mensalidades que determino no form só gera apenas 1 parcela. ...
JA
Gerar Mensalidade  
Boa noite!
Galera estou precisando de ajuda quem poderia mim ajudar, não consigo gerar as mensalidades que determino no form só gera apenas 1 parcela.




 
  1. <?php
  2. /**
  3. * System_userForm Registration
  4. * @author <your name here>
  5. */
  6. class PaymentForm extends TStandardForm
  7. {
  8. private $datagrid;
  9. private $frame;
  10. protected $form; // form
  11. protected $program_list;
  12. protected $formgrid;
  13. protected $formFields;
  14. /**
  15. * Class constructor
  16. * Creates the page and the registration form
  17. */
  18. function __construct()
  19. {
  20. parent::__construct();
  21. // defines the database
  22. parent::setDatabase('db_apcefse');
  23. // defines the active record
  24. parent::setActiveRecord('Payment');
  25. // creates the form
  26. $this->form = new BootstrapFormBuilder('form_Payment');
  27. $this->form->setFormTitle(('Cobranças') );
  28. // create the form fields
  29. $id = new TEntry('id');
  30. $data_emissao = new TDate('data_emissao');
  31. $valor_total = new TEntry('valor_total');
  32. $prazo_nome = new TEntry('prazo_nome');
  33. //Mask
  34. $data_emissao->setMask('dd/mm/yyyy');
  35. $this->form->addAction( _t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  36. $this->form->addAction( _t('New'), new TAction(array($this, 'onEdit')), 'fa:eraser red');
  37. $this->form->addAction( ('Gerar Mensalidades'), new TAction(array($this, 'onGerarParcelas')), 'fa:floppy-o');
  38. $this->form->addAction( _t('Back to the listing'), new TAction(array('PaymentList','onReload')), 'fa:table blue');
  39. // define the sizes
  40. $id->setSize('50%');
  41. //$payment_parcela->setSize('100');
  42. //$payment_date->setSize('100');
  43. //$payment_amount->setSize('100');
  44. // outros
  45. $id->setEditable(false);
  46. $this->form->addFields( [new TLabel('ID')], [$id] );
  47. $this->form->addFields( [new TLabel('Vencimento')], [$data_emissao], [new TLabel(('Parcelas'))], [$prazo_nome] );
  48. $this->form->addFields( [new TLabel('Valor')], [$valor_total]);
  49. // creates a DataGrid
  50. $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  51. $this->datagrid->datatable = 'true';
  52. $this->datagrid->style = 'width: 100%';
  53. $this->datagrid->setHeight(320);
  54. // creates the datagrid columns
  55. $column_numero_parcela = new TDataGridColumn('numero_parcela', 'Parcelas', 'center');
  56. $column_vencimento_parcela = new TDataGridColumn('vencimento_parcela', ('Vencimento'), 'left');
  57. $column_valor_parcela = new TDataGridColumn('valor_parcela', ('Valor'), 'left');
  58. // add the columns to the DataGrid
  59. $this->datagrid->addColumn($column_numero_parcela);
  60. $this->datagrid->addColumn($column_vencimento_parcela);
  61. $this->datagrid->addColumn($column_valor_parcela);
  62. // creates the datagrid model
  63. $this->datagrid->createModel();
  64. // wrap the page content
  65. $container = new TVBox;
  66. $container->style = 'width: 100%';
  67. $container->add(new TXMLBreadCrumb('menu.xml', 'PaymentList'));
  68. $container->add($this->form);
  69. $container->add($this->datagrid);
  70. // add the container to the page
  71. parent::add($container);
  72. }
  73. function onGerarParcelas($param) {
  74. try {
  75. //LIMPA A GRID
  76. $this->datagrid->clear();
  77. //VERIFICA OS CAMPOS OBRIGATORIOS E FAZ A VALIDAÇÃO
  78. $this->form->validate();
  79. //CONVERTE O VALOR PARA O FORMATO DE DECIMAIS USA PARA UMA DIVISAO CORRETA
  80. $total = ($param['valor_total']);
  81. //RECEBE O PRAZO INFORMADO PELO USER
  82. $prazo = $param['prazo_nome'];
  83. //CHAMA A FUNCAO QUE REALIZA O CALCULO DA DIVISAO E TBM REALIZA O CALCULO DOS VENCIMENTOS - RETORNA UM ARRAY
  84. $parcelas = GerarParcelas::calcularParcelas($total, $prazo, null);
  85. //ARMAZENA AS PARCELAS SEM UMA VARIAVEL DE SESSAO
  86. TSession::setValue(__CLASS__ . '_parcelas', $parcelas);
  87. //LAÇO ONDE ADD NA GRID A DIVISAO - OS CENTAVOS SAO ADICIONADOS NA ULTIMA PARCELA
  88. foreach ($parcelas as $parcela) {
  89. //ADICIONA AS PARCELAS NA GRID
  90. $item = new StdClass;
  91. $item->detail_id = empty($parcela->detail_id) ? 'X' . mt_rand(1000000000, 1999999999) : $parcela->detail_id;
  92. $item->id = $parcela->id;
  93. $item->numero_parcela = $parcela->numero_parcela;
  94. $item->valor_parcela = ($parcela->valor_parcela);
  95. $item->vencimento_parcela = $parcela->vencimento_parcela;
  96. $this->datagrid->addItem($item);
  97. }
  98. //MANTEM OS DADOS NO FORM
  99. $this->form->setData($this->form->getData());
  100. } catch (Exception $ex) {
  101. new TMessage('error', 'ma oee ' . $ex->getMessage());
  102. }
  103. }
  104. }
  105. ?>


 
  1. <?php
  2. /**
  3. * CLASSE RESPONSAVEL POR RECEBER O PRAZO E O VALOR TOTAL
  4. * A CLASSE REALIZA A DIVISAO DAS PARCELAS RETORNANDO UM ARRAY DE OBJETOS COM OS SEGUINTES ATRIBUTOS:
  5. *
  6. * -> parcela EX: 1/3
  7. * -> valor_parcela EX: R$ 500.00
  8. * -> vencimento_parcela EX: 05/06/2016
  9. * @author Danilo Ribeiro <daniloemanuel@msn.com>
  10. */
  11. class GerarParcelas extends TPage {
  12. /**
  13. *
  14. * @param float / double $ValorTotal
  15. * @param string Ex: '30/60/90' $Prazo
  16. * @param Pode ser Null ou String. Ex: 05/06/2016 $DataPrimeiraParcela
  17. * @return \stdClass - Um Array de Objetos
  18. */
  19. public static function calcularParcelas($ValorTotal, $Prazo, $DataPrimeiraParcela = null) {
  20. //SE OS PARAMETROS ValorTotal E Prazo NAO FOREM VAZIOS, EXECUTA O METODO
  21. if (!empty($ValorTotal) && !empty($Prazo)) {
  22. //SE O USER NAO PASSAR A DATA DO PRIMEIRO VENCIMENTO, ELE USA A DATA DO DIA
  23. if ($DataPrimeiraParcela != null) {
  24. $DataPrimeiraParcela = explode("/", $DataPrimeiraParcela);
  25. $dia = $DataPrimeiraParcela[0];
  26. $mes = $DataPrimeiraParcela[1];
  27. $ano = $DataPrimeiraParcela[2];
  28. } else {
  29. $dia = date("d");
  30. $mes = date("m");
  31. $ano = date("Y");
  32. }
  33. //TRANSFORMA A STRING PRAZO (30/60/90) EM UM ARRAY E CONTA QTOS INDICES; O NUMERO DE INDICES SERÁ O NUMERO DE PARCELAS
  34. $totalParcelas = count(explode('/', $Prazo));
  35. $auxTotParcelas = $totalParcelas;
  36. //INICIALIZA COM ZERO A VARIAVEL AUXILIAR SOMA, ESSA VARIAVEL SERA UTIL PARA QUE A DIVISAO SEJA EXATA, CASO HAJA RESIDUO
  37. $soma = 0;
  38. //LACO PARA CRIAR O OBSETO QUE SERA RETORNADO E REALIZAR OS CALCULOS
  39. for ($i = 0; $i < $totalParcelas; $i++) {
  40. $numeroParcela = $i + 1;
  41. $objeto[] = new stdClass;
  42. $objeto[$i]->detail_id = 'X';
  43. $objeto[$i]->id = empty($data->detail_id) ? 'X' . mt_rand(1000000000, 1999999999) : $data->detail_id;;
  44. $objeto[$i]->numero_parcela = $numeroParcela . '/' . $auxTotParcelas;
  45. $objeto[$i]->valor_parcela = $parcela = round($ValorTotal / $totalParcelas, 2);
  46. $objeto[$i]->vencimento_parcela = date("d/m/Y", strtotime("+" . $i . " month", mktime(0, 0, 0, $mes, $dia, $ano)));
  47. $soma += $parcela;
  48. }
  49. //APOS OS CALCULOS, VERIFICA-SE SE HOUVE RESIDUOS, SE HOUVE, ADICIONA-OS NA ULTIMA PARCELA
  50. if ($soma !== $ValorTotal) {
  51. $objeto[$totalParcelas - 1]->valor_parcela = $objeto[$totalParcelas - 1]->valor_parcela + ( $ValorTotal - $soma);
  52. }
  53. //VERIFICA SE O OBJETO EXISTE SE SIM, O RETORNA, SE NAO RETORNA NULL
  54. if ($objeto) {
  55. return $objeto;
  56. } else {
  57. return null;
  58. }
  59. } else {
  60. new TMessage('info', 'Veja se os Valores Foram Passados corretamente nos argumentos para o calculo');
  61. }
  62. }
  63. }
  64. ?>


Quem puder ajudar serei bastante grato!🤣

Att,
Jonathas Alves

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (2)


NR

A função calcularParcelas está retornando o array corretamente? Dê um var_dump na variável e poste aqui o retorno:
 
  1. <?php
  2. $parcelas = GerarParcelas::calcularParcelas($total, $prazo, null);
  3. var_dump($parcelas);
  4. ?>
MR

Use o comando for.

 
  1. <?php
  2. for($n=1; $n<=$qtd_parc; $n++)
  3. {
  4. }
  5. ?>