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.
Quem puder ajudar serei bastante grato!🤣
Att,
Jonathas Alves
Galera estou precisando de ajuda quem poderia mim ajudar, não consigo gerar as mensalidades que determino no form só gera apenas 1 parcela.
- <?php
- /**
- * System_userForm Registration
- * @author <your name here>
- */
- class PaymentForm extends TStandardForm
- {
- private $datagrid;
- private $frame;
- protected $form; // form
- protected $program_list;
- protected $formgrid;
- protected $formFields;
- /**
- * Class constructor
- * Creates the page and the registration form
- */
- function __construct()
- {
- parent::__construct();
- // defines the database
- parent::setDatabase('db_apcefse');
- // defines the active record
- parent::setActiveRecord('Payment');
- // creates the form
- $this->form = new BootstrapFormBuilder('form_Payment');
- $this->form->setFormTitle(('Cobranças') );
- // create the form fields
- $id = new TEntry('id');
- $data_emissao = new TDate('data_emissao');
- $valor_total = new TEntry('valor_total');
- $prazo_nome = new TEntry('prazo_nome');
- //Mask
- $data_emissao->setMask('dd/mm/yyyy');
- $this->form->addAction( _t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
- $this->form->addAction( _t('New'), new TAction(array($this, 'onEdit')), 'fa:eraser red');
- $this->form->addAction( ('Gerar Mensalidades'), new TAction(array($this, 'onGerarParcelas')), 'fa:floppy-o');
- $this->form->addAction( _t('Back to the listing'), new TAction(array('PaymentList','onReload')), 'fa:table blue');
- // define the sizes
- $id->setSize('50%');
- //$payment_parcela->setSize('100');
- //$payment_date->setSize('100');
- //$payment_amount->setSize('100');
- // outros
- $id->setEditable(false);
- $this->form->addFields( [new TLabel('ID')], [$id] );
- $this->form->addFields( [new TLabel('Vencimento')], [$data_emissao], [new TLabel(('Parcelas'))], [$prazo_nome] );
- $this->form->addFields( [new TLabel('Valor')], [$valor_total]);
- // creates a DataGrid
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->datatable = 'true';
- $this->datagrid->style = 'width: 100%';
- $this->datagrid->setHeight(320);
- // creates the datagrid columns
- $column_numero_parcela = new TDataGridColumn('numero_parcela', 'Parcelas', 'center');
- $column_vencimento_parcela = new TDataGridColumn('vencimento_parcela', ('Vencimento'), 'left');
- $column_valor_parcela = new TDataGridColumn('valor_parcela', ('Valor'), 'left');
- // add the columns to the DataGrid
- $this->datagrid->addColumn($column_numero_parcela);
- $this->datagrid->addColumn($column_vencimento_parcela);
- $this->datagrid->addColumn($column_valor_parcela);
- // creates the datagrid model
- $this->datagrid->createModel();
- // wrap the page content
- $container = new TVBox;
- $container->style = 'width: 100%';
- $container->add(new TXMLBreadCrumb('menu.xml', 'PaymentList'));
- $container->add($this->form);
- $container->add($this->datagrid);
- // add the container to the page
- parent::add($container);
- }
- function onGerarParcelas($param) {
- try {
- //LIMPA A GRID
- $this->datagrid->clear();
- //VERIFICA OS CAMPOS OBRIGATORIOS E FAZ A VALIDAÇÃO
- $this->form->validate();
- //CONVERTE O VALOR PARA O FORMATO DE DECIMAIS USA PARA UMA DIVISAO CORRETA
- $total = ($param['valor_total']);
- //RECEBE O PRAZO INFORMADO PELO USER
- $prazo = $param['prazo_nome'];
- //CHAMA A FUNCAO QUE REALIZA O CALCULO DA DIVISAO E TBM REALIZA O CALCULO DOS VENCIMENTOS - RETORNA UM ARRAY
- $parcelas = GerarParcelas::calcularParcelas($total, $prazo, null);
- //ARMAZENA AS PARCELAS SEM UMA VARIAVEL DE SESSAO
- TSession::setValue(__CLASS__ . '_parcelas', $parcelas);
- //LAÇO ONDE ADD NA GRID A DIVISAO - OS CENTAVOS SAO ADICIONADOS NA ULTIMA PARCELA
- foreach ($parcelas as $parcela) {
- //ADICIONA AS PARCELAS NA GRID
- $item = new StdClass;
- $item->detail_id = empty($parcela->detail_id) ? 'X' . mt_rand(1000000000, 1999999999) : $parcela->detail_id;
- $item->id = $parcela->id;
- $item->numero_parcela = $parcela->numero_parcela;
- $item->valor_parcela = ($parcela->valor_parcela);
- $item->vencimento_parcela = $parcela->vencimento_parcela;
- $this->datagrid->addItem($item);
- }
- //MANTEM OS DADOS NO FORM
- $this->form->setData($this->form->getData());
- } catch (Exception $ex) {
- new TMessage('error', 'ma oee ' . $ex->getMessage());
- }
- }
- }
- ?>
- <?php
- /**
- * CLASSE RESPONSAVEL POR RECEBER O PRAZO E O VALOR TOTAL
- * A CLASSE REALIZA A DIVISAO DAS PARCELAS RETORNANDO UM ARRAY DE OBJETOS COM OS SEGUINTES ATRIBUTOS:
- *
- * -> parcela EX: 1/3
- * -> valor_parcela EX: R$ 500.00
- * -> vencimento_parcela EX: 05/06/2016
- * @author Danilo Ribeiro <daniloemanuel@msn.com>
- */
- class GerarParcelas extends TPage {
- /**
- *
- * @param float / double $ValorTotal
- * @param string Ex: '30/60/90' $Prazo
- * @param Pode ser Null ou String. Ex: 05/06/2016 $DataPrimeiraParcela
- * @return \stdClass - Um Array de Objetos
- */
- public static function calcularParcelas($ValorTotal, $Prazo, $DataPrimeiraParcela = null) {
- //SE OS PARAMETROS ValorTotal E Prazo NAO FOREM VAZIOS, EXECUTA O METODO
- if (!empty($ValorTotal) && !empty($Prazo)) {
- //SE O USER NAO PASSAR A DATA DO PRIMEIRO VENCIMENTO, ELE USA A DATA DO DIA
- if ($DataPrimeiraParcela != null) {
- $DataPrimeiraParcela = explode("/", $DataPrimeiraParcela);
- $dia = $DataPrimeiraParcela[0];
- $mes = $DataPrimeiraParcela[1];
- $ano = $DataPrimeiraParcela[2];
- } else {
- $dia = date("d");
- $mes = date("m");
- $ano = date("Y");
- }
- //TRANSFORMA A STRING PRAZO (30/60/90) EM UM ARRAY E CONTA QTOS INDICES; O NUMERO DE INDICES SERÁ O NUMERO DE PARCELAS
- $totalParcelas = count(explode('/', $Prazo));
- $auxTotParcelas = $totalParcelas;
- //INICIALIZA COM ZERO A VARIAVEL AUXILIAR SOMA, ESSA VARIAVEL SERA UTIL PARA QUE A DIVISAO SEJA EXATA, CASO HAJA RESIDUO
- $soma = 0;
- //LACO PARA CRIAR O OBSETO QUE SERA RETORNADO E REALIZAR OS CALCULOS
- for ($i = 0; $i < $totalParcelas; $i++) {
- $numeroParcela = $i + 1;
- $objeto[] = new stdClass;
- $objeto[$i]->detail_id = 'X';
- $objeto[$i]->id = empty($data->detail_id) ? 'X' . mt_rand(1000000000, 1999999999) : $data->detail_id;;
- $objeto[$i]->numero_parcela = $numeroParcela . '/' . $auxTotParcelas;
- $objeto[$i]->valor_parcela = $parcela = round($ValorTotal / $totalParcelas, 2);
- $objeto[$i]->vencimento_parcela = date("d/m/Y", strtotime("+" . $i . " month", mktime(0, 0, 0, $mes, $dia, $ano)));
- $soma += $parcela;
- }
- //APOS OS CALCULOS, VERIFICA-SE SE HOUVE RESIDUOS, SE HOUVE, ADICIONA-OS NA ULTIMA PARCELA
- if ($soma !== $ValorTotal) {
- $objeto[$totalParcelas - 1]->valor_parcela = $objeto[$totalParcelas - 1]->valor_parcela + ( $ValorTotal - $soma);
- }
- //VERIFICA SE O OBJETO EXISTE SE SIM, O RETORNA, SE NAO RETORNA NULL
- if ($objeto) {
- return $objeto;
- } else {
- return null;
- }
- } else {
- new TMessage('info', 'Veja se os Valores Foram Passados corretamente nos argumentos para o calculo');
- }
- }
- }
- ?>
Quem puder ajudar serei bastante grato!🤣
Att,
Jonathas Alves
A função calcularParcelas está retornando o array corretamente? Dê um var_dump na variável e poste aqui o retorno:
Use o comando for.