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


Quem puder ajudar serei bastante grato!🤣

Att,
Jonathas Alves

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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$prazonull);
  3. var_dump($parcelas);
  4. ?>
MR

Use o comando for.

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