Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Estou deixando de usar o FRAMEWORK ADIANTI Achei que o FRAMEWORK iria me FACILITAR o uso e aumentar a minha produtividade! Comprei o Livro primeiro, achei que estava entendendo, usei de maneira simples, estão decidi comprar o Studio Professional, achei que realmente facilitaria muito na construção de telas, e facilitar mais na hora que temos que colocar as coisas a rodar, mas o que realmente está acontecendo, o livro é incompleto, fa...
AL
Estou deixando de usar o FRAMEWORK ADIANTI  
Fechado
Achei que o FRAMEWORK iria me FACILITAR o uso e aumentar a minha produtividade!
Comprei o Livro primeiro, achei que estava entendendo, usei de maneira simples, estão decidi comprar o Studio Professional, achei que realmente facilitaria muito na construção de telas, e facilitar mais na hora que temos que colocar as coisas a rodar, mas o que realmente está acontecendo, o livro é incompleto, faz muitas analises que todos iniciantes realmente entendem e que não farão uso em sistemas mais avançados, quando precisamos fazer coisas até simples, temos muita dificuldade, mesmo sabendo Orientação Objeto, não temos como analisar tudo que está escrito no Framework.
Quando buscamos alguma forma de entender aonde estamos errando, não temos nenhuma ajuda das pessoas que detém o conhecimento do Sistema, é como se fosse uma caixa preta que devemos decifrar e entender o que pensaram e com tenho que fazer e pouca literatura sobre o sistema.

Obrigado, mesmo!

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 (23)


AC

Bom dia!

Com todo respeito a sua opinião, acho que você está "morrendo na praia", amigo.
Creio que o maior motivo de muitas pessoas não avançarem com o Adianti é justamente a falta de conhecimento em PHP, POO e outros recursos e tecnologias necessárias para o desenvolvimento de aplicações WEB.
No desenvolvimento de sistemas avançados o framework me ajuda muito e, se tive alguma dificuldade, achei na documentação ou contornei com os meus conhecimentos em PHP, JavaScript, SQL...
A minha opinião sobre o caso: talvez você não tenha se adaptado ao uso de um framework ou mesmo de recursos com os quais não havia trabalhado.
Se eu puder ajudar em alguma coisa, entre em contato pelo meu e-mail: duirbyoak@hotmail.com.
Valeu!!!
AL

Em primeiro lugar, muito bom dia Américo, agradeço sua disponibilização de sua ajuda.

Tenho um bom conhecimento em PHP, não digo excelente, mais depois de 6 anos estudando e montando sistemas, realmente tenho um bom conhecimento, tenho bastante conhecimento em HTML, CSS, Javascript, Jquery, Orientação a Objeto, C, C#, Clipper, DBase III, Basic, Visual Basic, etc...

Com relação a programação e trabalho com sistemas, comecei em 01/11/1983, então com relação a estudar linguagens, criar sistemas de várias áreas e conhecimento das necessidades, tenho um pouco de experiência, mais eu como disse ontem para um amigo, a informática muda todo dia e precisamos de pessoas que queiram estar atualizadas a cada três meses, no desenvolvimento e no trabalho com o mesmo.

As empresas ou pessoas que se propõem a divulgar uma nova forma de trabalhar, ou que se propõe a colocar novas teorias em práticas, precisam analisar se o ensino e treinamento de novos membros para a mesma prática será possível e de que forma isso se dará, e se terá tempo para tal.

O que me parece, é que o OBJETIVO principal da empresa do FRAMEWORK é a venda de cursos, livros, vídeos de treinamento e outros objetos comerciais, e não divulgar e produzir conteúdos que realmente ensinam pessoas com menos conhecimento como eu, que se motivem e amplie os usuários e levem cada dia mais pessoas a utilizarem seus produtos, tanto que as indagações no fórum sem são as mesmas.

Como você disse, que acha que preciso ser um ÁS do PHP e Orientação a Objeto, preciso te informar que não é essa a propaganda do mesmo!

Obrigado.
AS

Apesar de não ser um expert fiquei encantado com o Adianti exatamente porque me trouxe facilidade para compreender o fantasma de POO, simpllificando bastante o raciocinio e o trabalho em cima do problema - programação. Talvez ai esteja a sua dificuldade, abrir mão do complexo para buscar um racioninio mais simplificado. A equiple Adianti semplre foi atenciosa e vem trabalhando muito para aperfeiçoar o Adianti Framework, assim eu entendo.

Os fontes do Adianti estão todos na sua mão, e vc mexer e remexer dentro dos seus projetos, sendo assim, concordo com Americo, de repente vc não desbruçou-se sobre a Ferramente o tempo suficiente para entende-lo o suficiente.

Aproveite esta oportunidade, aqui no BRASIL tem gente fazendo coisas maravilhosas, e este e um excelente exemplo. Desculpe-me se eu passar qualquer outra impressão que não seja ajuda-lo e enaltecer a equipe da ADIANTI.

Essa ferramenta esta me proporcionando excelente oportunidade de realização profissional ja que antes nunca fui brilhante na arte de programação que e a minha paixão, (apesar de ter aprendido as mesmas linguagens que vc alem do Delplhi) e agora aos 62 anos de idade sou profundamente grato ao Pablo e toda a sua equiple e me sinto profundamente capaz.
AL

Concordo com você, que tenho que debruçar no código do ADIANTI e realmente ver e rever todos os fundamentos deste FRAMEWORK, é exatamente neste ponto que estou atentando.
No início me pareceu que a curva de aprendizado deste sistema me seria muito rápida, por ter um livro que me traria muitas informações, e por ter alguns sistemas prontos, para poder analisar e trabalhar seus aspectos de montagem, e ter sua montagem Nacional e de conteúdo muito bom.
Não estou falando que o sistema é ruim, estou falando que a Empresa não se propõe a dar atenção as pessoas que estão iniciando no sistema.
Basta olhar no FORUM que você irá verificar que muitos buscam informações e ninguém responde, para quem fez pode parecer besteira mais para quem está tentando achar uma solução é muito importante.
E o me incomoda mais é a prepotência de acharem que todos são preguiçosos, que não leram, não buscaram exemplos no TUTOR, isso que fico mais puto.
Não deveria mais por exemplo:
  1. <?php
  2. /**
  3.  * NegociacaoForm Master/Detail
  4.  * @author  <your name here>
  5.  */
  6. class NegociacaoFormMaster extends TPage
  7. {
  8.     protected $form// form
  9.     protected $formFields;
  10.     protected $detail_list;
  11.     protected $custas_list;
  12.     
  13.     /**
  14.      * Page constructor
  15.      */
  16.     public function __construct()
  17.     {
  18.         parent::__construct();
  19.         
  20.       
  21.         // creates the form
  22.         $this->form = new TForm('form_Negociacao');
  23.         $this->form->class 'tform'// CSS class
  24.         $this->form->style 'max-width:90%'// style
  25.         parent::include_css('app/resources/custom-frame.css');
  26.         
  27.         $table_master = new TTable;
  28.         $table_master->width '100%';
  29.         
  30.         $table_master->addRowSet( new TLabel('Negociacao'), '''')->class 'tformtitle';
  31.         
  32.         // add a table inside form
  33.         $table_general = new TTable;
  34.         $table_custa   = new TTable;
  35.         $table_detail  = new TTable;
  36.         $table_general-> width '100%';
  37.         $table_custa-> width '100%';
  38.         $table_detail-> width  '100%';
  39.         
  40.         $frame_general = new TFrame;
  41.         $frame_general->setLegend('Negociacao');
  42.         $frame_general->style 'background:whitesmoke';
  43.         $frame_general->add($table_general);
  44.         
  45.         $table_master->addRow()->addCell$frame_general );
  46.         
  47.         $frame_custas = new TFrame();
  48.         $frame_custas->setLegend('Custas de Negociacao');
  49.         $table_master->addRow()->addCell($frame_custas);
  50.         
  51.         $row $table_master->addRow();
  52.         $row->addCell$table_detail );
  53.         
  54.         $this->form->add($table_master);
  55.         
  56.         // master fields
  57.         $id = new TEntry('id');
  58.         $produto = new TDBCombo('produto','factoring','Produtos','produto','produto');
  59.         $clientes_id = new  ">TDBSeekButton('clientes_id''factoring''form_Negociacao','Clientes','Nome','clientes_id','cliente_nome');
  60.         $cliente_nome = new TEntry('cliente_nome');
  61.         $lim_credito = new TEntry('LimCredito');
  62.         $taxas = new TEntry('taxas');
  63.         $valor_total = new TEntry('valor_total');
  64.         $valor_total_2 = new TEntry('valor_total_2');
  65.         $id->setSize(50);
  66.         $produto->setSize(150);
  67.         $lim_credito->setSize(150);
  68.         $lim_credito->setNumericMask(2,',','.');
  69.         $taxas->setNumericMask(2,'.','');
  70.         $taxas->setSize(50);
  71.         $valor_total->setSize(150);
  72.         $valor_total->setNumericMask(2,',','.');
  73.         $valor_total_2->setSize(150);
  74.         $valor_total_2->setEditable(FALSE);
  75.         $clientes_id->setSize(70);
  76.         $cliente_nome->setSize(300);
  77.         
  78.         if (!empty($id))
  79.         {
  80.             $id->setEditable(FALSE);
  81.         }
  82.         //custas fields
  83.         $custas_id = new THidden('custas_id');
  84.         $custas_descricao = new TEntry('custas_descricao');
  85.         $custas_custas_id = new TDBCombo('custas_custas_id''factoring''Custas''id''Descricao');
  86.         $custas_qtde = new TEntry('custas_qtde');
  87.         $custas_valor = new TEntry('custas_valor');
  88.         $custas_id->setSize(50);
  89.         $custas_id->setEditable(FALSE);
  90.         $custas_custas_id->setSize(250);
  91.         $custas_qtde->setSize(40);
  92.         $custas_valor->setSize(150);
  93.         $custas_valor->setNumericMask(2,',','.');
  94.         // detail fields
  95.         $detail_negociacao_id = new THidden('detail_negociacao_id');
  96.         $detail_id = new TEntry('detail_id');
  97.         $detail_sacado_id = new TCombo('detail_sacado_id');
  98.         $detail_sacado_nome = new THidden('detail_sacado_nome');
  99.         $detail_n_documento = new TEntry('detail_n_documento');
  100.         $detail_data_vcto = new TDate('detail_data_vcto');
  101.         $detail_valor_doc = new TEntry('detail_valor_doc');
  102.         $detail_prazo = new TEntry('detail_prazo');
  103.         $detail_desagio = new TEntry('detail_desagio');
  104.         $detail_valor_liq = new TEntry('detail_valor_liq');
  105.         $detail_valor_total = new THidden('total');
  106.         
  107.         $detail_id->setSize(50);
  108.         $detail_sacado_id->setSize(300);
  109.         $detail_valor_doc->setSize(150);
  110.         $detail_valor_doc->setNumericMask(2,',','.');
  111.         $detail_prazo->setSize(50);
  112.         $detail_data_vcto->setSize(100);
  113.         $detail_data_vcto->setMask('dd-mm-yyyy');
  114.         $detail_data_vcto->setValuedate('d-m-Y'mktime(000date("m")  , date("d"), date("Y")) ));
  115.         $detail_desagio->setNumericMask(2,',','.');
  116.         $detail_valor_liq->setNumericMask(2,',','.');
  117.         $detail_valor_liq->setSize(150);
  118.         $detail_desagio->setSize(150);
  119.         $detail_prazo->setEditable(FALSE);
  120.         $detail_desagio->setEditable(FALSE);
  121.         $detail_valor_liq->setEditable(FALSE);
  122.         $detail_id->setEditable(FALSE);
  123.         /** samples
  124.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  125.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  126.          $fieldX->setSize( 100, 40 ); // set size
  127.          **/
  128.         
  129.         // master
  130.         $table_general->addRowSet( new TLabel('Id'), $id );
  131.         $table_general->addRowSet( new TLabel('Produto'), array( $produto , new TLabel('Id') , $clientes_id , new TLabel('Cliente') , $cliente_nome ));
  132.         $table_general->addRowSet( new TLabel('Limite de Crédito'), $lim_credito);
  133.         $table_general->addRowSet( new TLabel('Taxa ao mês'), array ( $taxas, new TLabel('Valor Total'), $valor_total ));
  134.         $table_general->addRowSet('<hr/>','<hr/>');
  135.         $table_general->addRowSet( new TLabel('<b><u>Falta lançar</u></b>'), $valor_total_2);
  136.         $table_general->addRowSet('<hr/>','<hr/>');        
  137.         // detail
  138.         $btn_save_custas = new TButton('btn_save_custas');
  139.         $btn_save_custas->setAction(new TAction(array($this'onSaveCustas')), 'Registrar');
  140.         $btn_save_custas->setImage('fa:save');
  141.        
  142.         $table_custas = new TTable;
  143.         $frame_custas->add($table_custas);
  144.         $table_custas->addRowSet(''$custas_id);
  145.         $table_custas->addRowSet( new TLabel('Custas'), array( $custas_custas_id, new TLabel('Quantidade'), $custas_qtde, new TLabel('Valor Total'), $custas_valor) );       
  146.         $table_custas->addRowSet$btn_save_custas );
  147.         
  148.         
  149.         $this->custas_list = new TQuickGrid;
  150.         $this->custas_list->setHeight150 );
  151.         $this->custas_list->makeScrollable();
  152.         $this->custas_list->disableDefaultClick();
  153.         $this->custas_list->addQuickColumn('''delete''left'30);
  154.         
  155.         // custas_items
  156.         $this->custas_list->addQuickColumn('Id''custas_custas_id''left'30);
  157.         $this->custas_list->addQuickColumn('Custa''custas_descricao''left'230);
  158.         $this->custas_list->addQuickColumn('Qtde''custas_qtde''left'40);
  159.         $this->custas_list->addQuickColumn('Valor R$''custas_valor''right'150);
  160.         $this->custas_list->createModel();
  161.         
  162.         $row $table_detail->addRow();
  163.         $row->addCell($this->custas_list);
  164.         
  165.                
  166.         $table_total_custas = new TTable;
  167.         $table_custas->add($table_total_custas);
  168.         
  169.         $valor_custas = new TEntry('valor_custas');
  170.         $valor_custas->setEditable(FALSE);
  171.         $valor_custas->setNumericMask(2,',','.');
  172.         
  173.         $table_total_custas->addRowSet('Total de custas'$valor_custas);  
  174.         
  175.         
  176.         // detail
  177.         $frame_details = new TFrame();
  178.         $frame_details->setLegend('Negociacao Sacados');
  179.         $row $table_detail->addRow();
  180.         $row->addCell($frame_details);
  181.         
  182.         $btn_save_detail = new TButton('btn_save_detail');
  183.         $btn_save_detail->setAction(new TAction(array($this'onSaveDetail')), 'Registrar');
  184.         $btn_save_detail->setImage('fa:save');
  185.        
  186.         $table_details = new TTable;
  187.         $frame_details->add($table_details);
  188.         $table_details->addRowSet''$detail_negociacao_id );
  189.         $table_details->addRowSet( new TLabel('Id'), array( $detail_id, new TLabel('Sacado'), $detail_sacado_id ));
  190.         $table_details->addRowSet( new TLabel('Nº Doc'), array( $detail_n_documento, new TLabel('Data Vcto'), $detail_data_vcto, new TLabel('Valor R$'), $detail_valor_doc ));
  191.         $table_details->addRowSet( new TLabel('Prazo'), array($detail_prazo, new TLabel('(dias) Deságio'), $detail_desagio, new TLabel('Valor Líquido'), $detail_valor_liq));
  192.         $table_details->addRowSet('<br/>');
  193.         $table_details->addRowSet$btn_save_detail );
  194.         
  195.         $this->detail_list = new TQuickGrid;
  196.         $this->detail_list->setHeight175 );
  197.         $this->detail_list->makeScrollable();
  198.         $this->detail_list->disableDefaultClick();
  199.         //$this->detail_list->addQuickColumn('', 'edit', 'left', 30);
  200.         $this->detail_list->addQuickColumn('''delete''left'30);
  201.         
  202.         // items
  203.         $this->detail_list->addQuickColumn('Id''id''left'30);
  204.         $this->detail_list->addQuickColumn('ID Sac''sacado_id''left'30);
  205.         $this->detail_list->addQuickColumn('Sacado''sacado_nome''left'230);
  206.         $this->detail_list->addQuickColumn('Nº Doc''n_documento''left'150);
  207.         $this->detail_list->addQuickColumn('Data Vcto''data_vcto''left'100);
  208.         $this->detail_list->addQuickColumn('Valor R$''valor_doc''left'150);
  209.         $this->detail_list->addQuickColumn('Prazo''prazo''left'30);
  210.         $this->detail_list->addQuickColumn('Deságio''desagio''right'120);
  211.         $this->detail_list->addQuickColumn('Valor Liq''valor_liq''right'120);
  212.         $this->detail_list->createModel();
  213.         
  214.         $row $table_detail->addRow();
  215.         $row->addCell($this->detail_list);
  216.         
  217.         // valor_total_1
  218.         $valor_total_1 = new TEntry('valor_total_1');
  219.         $valor_total_1->style 'text-align: right';
  220.         $valor_total_1->setSize(120);
  221.         $valor_total_1->setEditable(FALSE);
  222.         $valor_desagio = new TEntry('valor_desagio');
  223.         $valor_desagio->style 'text-align: right';
  224.         $valor_desagio->setSize(100);
  225.         $valor_desagio->setEditable(FALSE);
  226.         $valor_liquido = new TEntry('valor_liquido');
  227.         $valor_liquido->style 'text-align: right';
  228.         $valor_liquido->setSize(120);
  229.         $valor_liquido->setEditable(FALSE);
  230.         
  231.         
  232.         $table_total = new TTable;
  233.         $frame_details->add($table_total);
  234.     
  235.         $table_total->style 'font-size: 17pt; text-align: right';
  236.         
  237.         // create an action button (save)
  238.         $save_button=new TButton('save');
  239.         $save_button->setAction(new TAction(array($this'onSave')), _t('Save'));
  240.         $save_button->setImage('ico_save.png');
  241.         // create an new button (edit with no parameters)
  242.         $new_button=new TButton('new');
  243.         $new_button->setAction(new TAction(array($this'onClear')), _t('New'));
  244.         $new_button->setImage('ico_new.png');
  245.         $cliente_action = new TAction(array($this'onExitAction'));
  246.         $clientes_id->setExitAction($cliente_action);
  247.         $prazo_action = new TAction(array($this'onPrazoAction'));
  248.         $detail_data_vcto->setExitAction($prazo_action);
  249.         
  250.         $valor_action = new TAction(array($this'onDesagio'));
  251.         $detail_valor_doc->setExitAction($valor_action);
  252.         
  253.         $custas_action = new TAction(array($this'onCustas'));
  254.         $custas_qtde->setExitAction($custas_action);
  255.         
  256.         // define form fields
  257.         $this->formFields   = array($id,$produto,$clientes_id,$cliente_nome,$taxas,$valor_total,$detail_id,$detail_sacado_id,$detail_sacado_nome,$detail_n_documento,$detail_data_vcto,$detail_valor_doc,$detail_prazo,$detail_desagio,$detail_valor_liq,$valor_total_1,$valor_total_2,$valor_desagio,$valor_liquido,$custas_id,$custas_custas_id,$custas_qtde,$custas_valor,$valor_custas);
  258.         $this->formFields[] = $btn_save_detail;
  259.         $this->formFields[] = $btn_save_custas;
  260.         $this->formFields[] = $save_button;
  261.         $this->formFields[] = $new_button;
  262.         $this->formFields[] = $detail_negociacao_id;
  263.         $this->form->setFields$this->formFields );
  264.         $table_master->addRowSet(array('Totais lançados R$ '$valor_total_1,'_____',$valor_desagio$valor_liquido))->style 'text-align: right';
  265.         $table_master->addRowSet( array($save_button$new_button), '''')->class 'tformaction'// CSS class
  266.         
  267.         
  268.         // create the page container
  269.         $container = new TVBox;
  270.         $container->style 'width: 90%';
  271.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  272.         $container->add($this->form);
  273.         
  274.         parent::add($container);
  275.     }
  276.     
  277.     public static function onCustas($param)
  278.     {
  279.     
  280.          
  281.         $custasid $param['custas_custas_id'];
  282.         
  283.         TTransaction::open('factoring');
  284.         
  285.             $custa Custas::find($custasid);
  286.             if (!$custa->Valor <= '0')
  287.             {
  288.                 $valor $param['custas_qtde'] * $custa->Valor;
  289.                 $valor number_format($valor,2,',','.');
  290.             } else {
  291.                 $valor $param['custas_qtde'] * (($custa->Porcentagem *10)* $param['valor_total']);
  292.                 $valor number_format($valor,2,',','.');
  293.             }
  294.             
  295.             $obj = new StdClass;
  296.             $obj->custas_valor $valor;
  297.             
  298.             TForm::sendData('form_Negociacao'$obj);
  299.         TTransaction::close();
  300.     } 
  301.     
  302.     public static function onPrazoAction($param)
  303.     {
  304.        $data $param['detail_data_vcto'];
  305.         
  306.        $datahoje Date('Y-m-d');
  307.        
  308.        $data1 strtotime($datahoje);
  309.        
  310.        $data2 Date('Y-m-d'strtotime($data));
  311.        
  312.        $data3 strtotime($data2);
  313.        
  314.        $diferenca $data3 $data1;
  315.        
  316.        $prazo = (int)floor($diferenca / (60*60*24));
  317.        
  318.        $obj = new StdClass;
  319.        $obj->detail_prazo $prazo
  320.        
  321.        TForm::sendData('form_Negociacao'$obj);
  322.     }
  323.     
  324.     
  325.     public static function onExitAction($param)
  326.     {
  327.         $key $param['clientes_id'];
  328.                
  329.         TTransaction::open('factoring');
  330.         
  331.         $repository = new TRepository('Sacados');
  332.         
  333.         $criteria = new TCriteria;
  334.         $criteria->add(new TFilter('clientes_id''='$key));
  335.         $sacadosA = array();
  336.         $options $repository->load($criteria);
  337.            foreach ($options as $option)
  338.            {
  339.                $i $option->id;
  340.                $sacadosA[$i]= $option->Nome;
  341.            }    
  342.         
  343.         TCombo::reload('form_Negociacao''detail_sacado_id'$sacadosATRUE );
  344.         
  345.         $cliente = new Clientes($key);
  346.         $limite $cliente->LimCredito;
  347.         
  348.         $obj = new stdClass;
  349.         $obj->LimCredito number_format($limite,2,',','.');
  350.         
  351.         TForm::sendData('form_Negociacao'$obj);
  352.         
  353.                        
  354.         TTransaction::close();
  355.     }
  356.     
  357.     public static function onDesagio($param)
  358.     {
  359.         $taxa $param['taxas'];
  360.         $prazo $param['detail_prazo'];
  361.         $valordoc str_replace('.',''$param['detail_valor_doc']);
  362.         $valordoc str_replace(',','.',$valordoc);
  363.         $desc = ($taxa 30) * $prazo;
  364.         $desagio = ($valordoc $desc)/100;
  365.         $valorliq $valordoc $desagio;
  366.         
  367.         $obj = new StdClass;
  368.         $obj->detail_desagio $desagio;
  369.         $obj->detail_valor_liq $valorliq;
  370.         
  371.         TForm::sendData('form_Negociacao'$obj);
  372.         
  373.     }
  374.     
  375.     /**
  376.      * Clear form
  377.      * @param $param URL parameters
  378.      */
  379.     public function onClear($param)
  380.     {
  381.         $this->form->clear();
  382.         TSession::setValue(__CLASS__.'_items', array());
  383.         TSession::setValue(__CLASS__.'_custas', array());
  384.         $this->onReload$param );
  385.     }
  386.     
  387.     /**
  388.      * Save an item from form to session list
  389.      * @param $param URL parameters
  390.      */
  391.     public function onSaveDetail$param )
  392.     {
  393.         try
  394.         {
  395.             TTransaction::open('factoring');
  396.             $data $this->form->getData();
  397.             $saca = new Sacados($data->detail_sacado_id);
  398.             /** validation sample
  399.             if (! $data->fieldX)
  400.                 throw new Exception('The field fieldX is required');
  401.             **/
  402.             
  403.             $data->detail_sacado_nome $saca->Nome;
  404.             
  405.             $items TSession::getValue(__CLASS__.'_items');
  406.             $key = empty($data->detail_negociacao_id) ? 'X'.mt_rand(10000000001999999999) : $data->detail_negociacao_id;
  407.             
  408.             $items$key ] = array();
  409.             $items$key ]['negociacao_id'] = $key;
  410.             $items$key ]['id'] = $data->detail_id;
  411.             $items$key ]['sacado_id'] = $data->detail_sacado_id;
  412.             $items$key ]['sacado_nome'] = $data->detail_sacado_nome;
  413.             $items$key ]['n_documento'] = $data->detail_n_documento;
  414.             $items$key ]['data_vcto'] = $data->detail_data_vcto;
  415.             $items$key ]['valor_doc'] = $data->detail_valor_doc;
  416.             $items$key ]['prazo'] = $data->detail_prazo;
  417.             $items$key ]['desagio'] = number_format($data->detail_desagio,2);
  418.             $items$key ]['valor_liq'] = number_format($data->detail_valor_liq,2);
  419.             
  420.             TSession::setValue(__CLASS__.'_items'$items);
  421.             
  422.             $obj = new StdClass;
  423.             $obj->valor1 str_replace('.',''$data->valor_total);
  424.             $obj->valor1 str_replace(',','.'$obj->valor1);
  425.             $obj->valor2 str_replace('.',''$data->detail_valor_doc);
  426.             $obj->valor2 str_replace(',','.'$obj->valor2);
  427.             $obj->valor3 $data->detail_desagio;
  428.             $obj->valor4 $data->detail_valor_liq;
  429.                         
  430.             // clear detail form fields
  431.             $data->detail_negociacao_id;
  432.             $data->detail_id '';
  433.             $data->detail_sacado_id '';
  434.             $data->detail_sacado_nome '';
  435.             $data->detail_n_documento '';
  436.             $data->detail_data_vcto '';
  437.             $data->detail_valor_doc '';
  438.             $data->detail_prazo '';
  439.             $data->detail_desagio '';
  440.             $data->detail_valor_liq '';
  441.             
  442.             if ($data->valor_total_1 <= 0)
  443.             {
  444.              $data->valor_total_1 $obj->valor2;
  445.              $data->valor_total_1 number_format($data->valor_total_1,2,',','.');
  446.             } 
  447.             else 
  448.             {
  449.              $val1 str_replace('.','',$data->valor_total_1);
  450.              $val1 str_replace(',','.',$val1);
  451.              $data->valor_total_1 =  ($val1 $obj->valor2);
  452.              $data->valor_total_1 number_format($data->valor_total_1,2,',','.');
  453.             }
  454.             if ($data->valor_desagio <= 0)
  455.             {
  456.              $data->valor_desagio $obj->valor3;
  457.              $data->valor_desagio number_format($data->valor_desagio,2,',','.');
  458.             } 
  459.             else 
  460.             {
  461.              $val3 str_replace('.','',$data->valor_desagio);
  462.              $val3 str_replace(',','.',$val3);
  463.              $data->valor_desagio =  ($val3 $obj->valor3);
  464.              $data->valor_desagio number_format($data->valor_desagio,2,',','.');
  465.             }            
  466.             
  467.             if ($data->valor_liquido <= 0)
  468.             {
  469.              $data->valor_liquido $obj->valor4 $data->valor_custas;
  470.              $data->valor_liquido number_format($data->valor_liquido,2,',','.');
  471.             } 
  472.             else 
  473.             {
  474.              $val4 str_replace('.','',$data->valor_liquido);
  475.              $val4 str_replace(',','.',$val4);
  476.              $data->valor_liquido =  ($val4 $obj->valor4);
  477.              $data->valor_liquido number_format($data->valor_liquido,2,',','.');
  478.             }
  479.             if ($data->valor_total_2 <= 0)
  480.             {
  481.              $data->valor_total_2 $obj->valor1 $obj->valor2;
  482.              $data->valor_total_2 number_format($data->valor_total_2,2,',','.');
  483.             } 
  484.             else 
  485.             {
  486.              $val2 str_replace('.','',$data->valor_total_2);
  487.              $val2 str_replace(',','.',$val2);
  488.              $data->valor_total_2 =  ($val2 $obj->valor2);
  489.              $data->valor_total_2 number_format($data->valor_total_2,2,',','.');
  490.             }
  491.             $cliente = array('clientes_id' => $data->clientes_id);
  492.             
  493.             $this->onExitAction($cliente);
  494.             
  495.             TTransaction::close();
  496.             
  497.             $this->form->setData($data);
  498.             
  499.             $this->onReload$param ); // reload the items
  500.             $this->onReloadCustas $param );
  501.         }
  502.         catch (Exception $e)
  503.         {
  504.             $this->form->setData$this->form->getData());
  505.             new TMessage('error'$e->getMessage());
  506.         }
  507.     }
  508.     /**
  509.      * Save an item from form to session list
  510.      * @param $param URL parameters
  511.      */
  512.     public function onSaveCustas$param )
  513.     {
  514.         try
  515.         {
  516.             TTransaction::open('factoring');
  517.             
  518.             $data $this->form->getData();
  519.             $descricao Custas::find($data->custas_custas_id);
  520.            
  521.             /** validation sample
  522.             if (! $data->fieldX)
  523.                 throw new Exception('The field fieldX is required');
  524.             **/
  525.             
  526.             $custas TSession::getValue(__CLASS__.'_custas');
  527.             $key = empty($data->id) ? 'ZZ'.mt_rand(100000000199999999) : $data->id;
  528.             
  529.             $custas$key ] = array();
  530.             $custas$key ]['id'] = $key;
  531.             $custas$key ]['custas_descricao'] = $descricao->Descricao;
  532.             $custas$key ]['custas_id'] = $data->custas_custas_id;
  533.             $custas$key ]['qtde'] = $data->custas_qtde;
  534.             $custas$key ]['valor'] = $data->custas_valor;
  535.             
  536.             TSession::setValue(__CLASS__.'_custas'$custas);
  537.             
  538.             $obj = new StdClass;
  539.             $obj->valor str_replace('.',''$data->valor_custas);
  540.             $obj->valor str_replace(',','.'$obj->valor);
  541.             
  542.             if ($obj->valor <= 0)
  543.             {
  544.              $valo str_replace('.','',$data->custas_valor);
  545.              $valo str_replace(',','.',$valo);
  546.              $data->valor_custas number_format($valo,2,',','.');
  547.             } 
  548.             else 
  549.             {
  550.              $data->valor_custas =  ($obj->valor $data->custas_valor);
  551.              $data->valor_custas number_format($data->valor_custas,2,',','.');
  552.             }  
  553.                
  554.             // clear detail form fields
  555.             $data->custas_id '';
  556.             $data->custas_descricao '';
  557.             $data->custas_custas_id '';
  558.             $data->custas_qtde '';
  559.             $data->custas_valor '';
  560.             $cliente = array('clientes_id' => $data->clientes_id);
  561.             
  562.             $this->onExitAction($cliente);            
  563.             
  564.             TTransaction::close();
  565.             
  566.             $this->form->setData($data);
  567.             
  568.             $this->onReloadCustas$param ); // reload the items
  569.         }
  570.         catch (Exception $e)
  571.         {
  572.             $this->form->setData$this->form->getData());
  573.             new TMessage('error'$e->getMessage());
  574.         }
  575.     }
  576.     
  577.     public function onDeleteDetail$param )
  578.     {
  579.         $data $this->form->getData();
  580.         
  581.         // reset items
  582.             $data->detail_id '';
  583.             $data->detail_sacado_id '';
  584.             $data->detail_n_documento '';
  585.             $data->detail_data_vcto '';
  586.             $data->detail_valor_doc '';
  587.             $data->detail_prazo '';
  588.             $data->detail_desagio '';
  589.             $data->detail_valor_liq '';
  590.         
  591.         // read session items
  592.         $items TSession::getValue(__CLASS__.'_items');
  593.         
  594.         // reduz os valores totais
  595.         
  596.             $boleto $items$param['item_key']];
  597.             
  598.              $val1 str_replace('.','',$data->valor_total_1);
  599.              $val1 str_replace(',','.',$val1);
  600.              $data->valor_total_1 =  ($val1 $boleto['valor_doc']);
  601.              $data->valor_total_1 number_format($data->valor_total_1,2,',','.');
  602.              
  603.              $val3 str_replace('.','',$data->valor_desagio);
  604.              $val3 str_replace(',','.',$val3);
  605.              $data->valor_desagio =  ($val3 $boleto['desagio']);
  606.              $data->valor_desagio number_format($data->valor_desagio,2,',','.');
  607.              $val4 str_replace('.','',$data->valor_liquido);
  608.              $val4 str_replace(',','.',$val4);
  609.              $data->valor_liquido =  ($val4 $boleto['valor_liq']);
  610.              $data->valor_liquido number_format($data->valor_liquido,2,',','.');
  611.              $val2 str_replace('.','',$data->valor_total_2);
  612.              $val2 str_replace(',','.',$val2);
  613.              $data->valor_total_2 =  ($val2 $boleto['valor_doc']);
  614.              $data->valor_total_2 number_format($data->valor_total_2,2,',','.');
  615.              
  616.             // clear form data
  617.             $this->form->setData$data );
  618.                 
  619.         // delete the item from session
  620.         unset($items$param['item_key'] ] );
  621.         TSession::setValue(__CLASS__.'_items'$items);
  622.         
  623.         // reload items
  624.         $this->onReload$param );
  625.     }
  626.     
  627.     /**
  628.      * Delete an item from session list
  629.      * @param $param URL parameters
  630.      */
  631.     public function onDeleteCustas$param )
  632.     {
  633.         $data $this->form->getData();
  634.         
  635.          echo '<pre>'.print_r($data).'</pre>'
  636.         
  637.         // reset items
  638.             $data->custas_id '';
  639.             $data->custas_custas_id '';
  640.             $data->custas_qtde '';
  641.             $data->custas_valor '';
  642.                     
  643.         // read session items
  644.         $custas TSession::getValue(__CLASS__.'_custas');
  645.              $custas_neg $custas$param['custo_key']];
  646.         
  647.         // reduz os valores totais
  648.         
  649.              $val2 str_replace('.','',$custas_neg['valor']);
  650.              $val2 str_replace(',','.',$val2);
  651.              
  652.              $val str_replace('.','',$data->valor_custas);
  653.              $val str_replace(',','.',$val);
  654.              $data->valor_custas $val $val2;
  655.              $data->valor_custas number_format($data->valor_custas,2,',','.');
  656.              
  657.             // clear form data
  658.             $this->form->setData$data );
  659.                 
  660.         // delete the item from session
  661.         unset($custas$param['custo_key'] ] );
  662.         TSession::setValue(__CLASS__.'_custas'$custas);
  663.         
  664.         // reload items
  665.         $this->onReloadCustas$param );
  666.     }
  667.     /**
  668.      * Load the items list from session
  669.      * @param $param URL parameters
  670.      */
  671.     public function onReload($param)
  672.     {
  673.         // read session items
  674.         $items TSession::getValue(__CLASS__.'_items');    
  675.         
  676.         $this->detail_list->clear(); // clear detail list
  677.         
  678.         $data $this->form->getData();
  679.         
  680.         $i 1;
  681.         
  682.         if ($items)
  683.         {
  684.             $cont 1;
  685.             foreach ($items as $list_item_key => $list_item)
  686.             {
  687.                 $item_name 'prod_' $cont++;
  688.                 
  689.                 $item = new StdClass;
  690.                 
  691.                 // create action buttons
  692.                 $action_del = new TAction(array($this'onDeleteDetail'));
  693.                 $action_del->setParameter('item_key'$list_item_key);
  694.                 
  695.                
  696.                 $button_del = new TButton('delete_detail'.$cont);
  697.                 $button_del->class 'btn btn-default btn-sm';
  698.                 $button_del->setAction$action_del'' );
  699.                 $button_del->setImage('fa:trash-o red fa-lg');
  700.                 
  701.                 $item->delete $button_del;
  702.                 
  703.                 $this->formFields$item_name.'_delete' ] = $item->delete;
  704.                 
  705.                 // items
  706.                 $item->negociacao_id $list_item['negociacao_id'];
  707.                 $item->id $list_item['id'];
  708.                 $item->sacado_id $list_item['sacado_id'];
  709.                 $item->sacado_nome $list_item['sacado_nome'];
  710.                 $item->n_documento $list_item['n_documento'];
  711.                 $item->data_vcto $list_item['data_vcto'];
  712.                 $item->valor_doc $list_item['valor_doc'];
  713.                 $item->prazo $list_item['prazo'];
  714.                 $item->desagio $list_item['desagio'];
  715.                 $item->valor_liq $list_item['valor_liq'];
  716.                 
  717.                 $row $this->detail_list->addItem$item );
  718.                 $row->onmouseover='';
  719.                 $row->onmouseout='';
  720.                 
  721.              }   
  722.             $this->form->setFields$this->formFields );
  723.                        
  724.         }
  725.         
  726.         $this->loaded TRUE;
  727.     }
  728.     
  729.     public function onReloadCustas($param)
  730.     {
  731.         // read session items
  732.         
  733.         $custas TSession::getValue(__CLASS__.'_custas');    
  734.         
  735.         $this->custas_list->clear(); // clear detail list
  736.         
  737.         $data $this->form->getData();
  738.         
  739.         $i 1;
  740.         
  741.         if ($custas)
  742.         {
  743.             $cont 1;
  744.             foreach ($custas as $list_item_key => $list_item)
  745.             {
  746.                 $custa_name 'cust_' $cont++;
  747.                 
  748.                 $custa = new StdClass;
  749.                 
  750.                 // create action buttons
  751.                 $action_del = new TAction(array($this'onDeleteCustas'));
  752.                 $action_del->setParameter('custo_key'$list_item_key);
  753.                 
  754.                
  755.                 $button_del = new TButton('delete_custas'.$cont);
  756.                 $button_del->class 'btn btn-default btn-sm';
  757.                 $button_del->setAction$action_del'' );
  758.                 $button_del->setImage('fa:trash-o red fa-lg');
  759.                 
  760.                 $custa->delete $button_del;
  761.                 
  762.                 $this->formFields$custa_name.'_delete' ] = $custa->delete;
  763.                 
  764.                 // items
  765.                 $custa->id $list_item['id'];
  766.                 $custa->custas_custas_id $list_item['custas_id'];
  767.                 $custa->custas_descricao $list_item['custas_descricao'];
  768.                 $custa->custas_qtde $list_item['qtde'];
  769.                 $custa->custas_valor $list_item['valor'];
  770.                 
  771.                 $row $this->custas_list->addItem$custa );
  772.                 $row->onmouseover='';
  773.                 $row->onmouseout='';
  774.                 
  775.              }   
  776.             $this->form->setFields$this->formFields );
  777.                        
  778.         }
  779.         
  780.         $this->loaded TRUE;
  781.     }
  782.     /**
  783.      * Load Master/Detail data from database to form/session
  784.      */
  785.     public function onEdit($param)
  786.     {
  787.         try
  788.         {
  789.             TTransaction::open('factoring');
  790.             
  791.             if (isset($param['key']))
  792.             {
  793.                 $key $param['key'];
  794.                 
  795.                 $object = new Negociacao($key);
  796.                 $items  NegociacaoSacados::where('negociacao_id''='$key)->load();
  797.                 
  798.                 $session_items = array();
  799.                 
  800.                 foreach( $items as $item )
  801.                 {
  802.                     $item_key $item->negociacao_id;
  803.                     $session_items[$item_key] = $item->toArray();
  804.                     $session_items[$item_key]['negociacao_id'] = $item->negociacao_id;
  805.                     $session_items[$item_key]['id'] = $item->id;
  806.                     $session_items[$item_key]['sacado_id'] = $item->sacado_id;
  807.                     $session_items[$item_key]['sacado_nome'] = $item->sacado_nome;
  808.                     $session_items[$item_key]['n_documento'] = $item->n_documento;
  809.                     $session_items[$item_key]['data_vcto'] = $item->data_vcto;
  810.                     $session_items[$item_key]['valor_doc'] = $item->valor_doc;
  811.                     $session_items[$item_key]['prazo'] = $item->prazo;
  812.                     $session_items[$item_key]['desagio'] = $item->desagio;
  813.                     $session_items[$item_key]['valor_liq'] = $item->valor_liq;
  814.                 }
  815.                 TSession::setValue(__CLASS__.'_items'$session_items);
  816.                 
  817.                 $this->form->setData($object); // fill the form with the active record data
  818.                 $this->onReload$param ); // reload items list
  819.                 TTransaction::close(); // close transaction
  820.             }
  821.             else
  822.             {
  823.                 $this->form->clear();
  824.                 TSession::setValue(__CLASS__.'_items'null);
  825.                 $this->onReload$param );
  826.             }
  827.         }
  828.         catch (Exception $e// in case of exception
  829.         {
  830.             new TMessage('error'$e->getMessage());
  831.             TTransaction::rollback();
  832.         }
  833.     }
  834.     
  835.     /**
  836.      * Save the Master/Detail data from form/session to database
  837.      */
  838.     public function onSave()
  839.     {
  840.         try
  841.         {
  842.             // open a transaction with database
  843.             TTransaction::open('factoring');
  844.             
  845.             $data $this->form->getData();
  846.             
  847.             $master = new Negociacao;
  848.             $master->fromArray( (array) $data);
  849.             
  850.             $master->taxas $data->taxas;
  851.             
  852.             $master->desagio str_replace('.','',$data->valor_desagio);
  853.             $master->desagio str_replace(',','.',$master->desagio);
  854.             $master->custas str_replace('.','',$data->valor_custas);
  855.             $master->custas str_replace(',','.',$master->custas);            
  856.             $master->valor_liq str_replace('.','',$data->valor_liquido);
  857.             $master->valor_liq str_replace(',','.',$master->valor_liq);
  858.             $master->valor_total str_replace('.','',$data->valor_total_1);
  859.             $master->valor_total str_replace(',','.',$master->valor_total);
  860.             
  861.             $this->form->validate(); // form validation
  862.             
  863.             $master->store(); // save master object
  864.             
  865.             $key_id $master->getLastID();
  866.             
  867.             $keep_custas = array();
  868.             
  869.             $custas TSession::getValue(__CLASS__.'_custas');
  870.             if ( $custas )
  871.             {
  872.                 foreach ( $custas as $cust)
  873.                 {
  874.                     if (substr($cust['id'],0,2) == 'ZZ' )
  875.                     {
  876.                        $detail = new CustasNegociacao;
  877.                     }
  878.                     else
  879.                     {
  880.                         $detail CustasNegociacao::find($cust['id']);
  881.                     }
  882.                     $detail->negociacao_id $key_id;
  883.                     $detail->custas_id $cust['custas_id'];
  884.                     $detail->qtde $cust['qtde'];
  885.                     $detail->valor $cust['valor'];
  886.                     $detail->store();
  887.                     
  888.                     $keep_custas[] = $detail->id;
  889.                  }
  890.              }
  891.              
  892.                     
  893.             // delete details
  894.             $old_items NegociacaoSacados::where('negociacao_id''='$master->id)->load();
  895.             
  896.             $keep_items = array();
  897.             
  898.             // get session items
  899.             $items TSession::getValue(__CLASS__.'_items');
  900.             
  901.             if( $items )
  902.             {
  903.                 foreach( $items as $item )
  904.                 {
  905.                     if (substr($item['negociacao_id'],0,1) == 'X' // new record
  906.                     {
  907.                         $detail = new NegociacaoSacados;
  908.                     }
  909.                     else
  910.                     {
  911.                         $detail NegociacaoSacados::find($item['negociacao_id']);
  912.                     }
  913.                     
  914.                     $detail->id  $item['id'];
  915.                     $detail->sacado_id  $item['sacado_id'];
  916.                     $detail->sacado_nome $item['sacado_nome'];
  917.                     $detail->n_documento  $item['n_documento'];
  918.                     $detail->data_vcto  date('Y-m-d',strtotime($item['data_vcto']));
  919.                     $valoritem str_replace('.','',$item['valor_doc']);
  920.                     $valoritem str_replace(',','.',$valoritem);
  921.                     $detail->valor_doc  $valoritem;
  922.                     $detail->prazo  $item['prazo'];
  923.                     $valor_desagio str_replace(',','',$item['desagio']);
  924.                     $detail->desagio $valor_desagio;
  925.                     $valor_liquido str_replace(',','',$item['valor_liq']);                    
  926.                     $detail->valor_liq $valor_liquido;
  927.                     $detail->negociacao_id $master->id;
  928.                     $detail->store();
  929.                     
  930.                     $keep_items[] = $detail->negociacao_id;
  931.                 }
  932.             }
  933.             
  934.             if ($old_items)
  935.             {
  936.                 foreach ($old_items as $old_item)
  937.                 {
  938.                     if (!in_array$old_item->negociacao_id$keep_items))
  939.                     {
  940.                         $old_item->delete();
  941.                     }
  942.                 }
  943.             }
  944.             TTransaction::close(); // close the transaction
  945.             
  946.             // reload form and session items
  947.             $this->onEdit(array('key'=>$master->id));
  948.             
  949.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  950.         }
  951.         catch (Exception $e// in case of exception
  952.         {
  953.             new TMessage('error'$e->getMessage());
  954.             $this->form->setData$this->form->getData() ); // keep form data
  955.             TTransaction::rollback();
  956.         }
  957.     }
  958.     
  959.     /**
  960.      * Show the page
  961.      */
  962.     public function show()
  963.     {
  964.         // check if the datagrid is already loaded
  965.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  966.         {
  967.             $this->onReloadfunc_get_arg(0) );
  968.         }
  969.         parent::show();
  970.     }
  971. }
  972. Obrigado
  973.  </your>
FC

Framework tem me atendido bem.
Não vejo essa dificuldade toda não é a documentação do site é boa os exemplos precisam ser estudados assim como o core , com tempo irá se acostumar.
LC

Eu gosto muito o Adianti, estou usando, comprei os livros, os videos, estou contente, espero realmente que o Pablo de continuidade no projeto e pelo que parece ele vai dar, eu até concordo com você Antonio que tem uma demora nas respostas, mais vejo o pessoal aqui ajudar bastante.

Não sei se você já testou outros frame, tipo scriptcase (eu comprei fiz um sistema e desisti), tem também o phpmaker (esse só conheço mais nunca usei), tem o Maker da Softwell (quando me interessei fiquei empolgado mais o preço complica), GVinci (bem legal, mais só publica em servidor windows), a maioria desses exemplos a curva de aprendizagem é complicado.

Emfim acabei indo estudar PHP, HTML, CSS, Javascript, já que venho da programação desktop (delphi), até que me identifiquei com o Adianti.

Na minha opinião esta valendo a pena. Mais tenho muito o que aprender ainda.
JC

Saudações Antonio Garcia,
Para reflexão www.adianti.com.br/forum/pt/view_2313?reflexao-adianti-framework
AL

Senhores, li a posição do Jorge Cenci e realmente, sinto a mesma coisa, sei que esta ferramente facilitaria a construção de sistemas, mais ao mesmo tempo, digo que estudar este FRAMEWORK por anos será uma perca de tempo.
Afinal de contas o ZEND FRAMEWORK, CODEIGNITER e muitos outros, possuem vastos materiais e exemplos na Internet, e inúmeras EMPRESAS de desenvolvimento que trabalham com estas Ferramentas.
Prefiro investir meu tempo e dinheiro em Livros e Exemplos de Frameworks mais desenvolvidos e muito mais utilizados, com fóruns muito robustos e com exemplos realmente que irá me dar maiores condições de profissionalismo e conhecimento destas ferramentas.
Realmente fica o registro.
Realmente faz parte de um processo, que aconteceu comigo e irá acontecer com muitas outras pessoas que buscam ferramentas para facilitar a nossa programação e nosso dia dia.
Ontem mesmo disse a um amigo, que insiste em programar páginas WEB em produtos que automatizam como o Dreamweaver e agora o ADOBE MUSE, infelizmente eles ficam anos estudando uma ferramenta que se ele estudasse o CSS, HTML e Javascript por um Ano, ele nunca mais utilizaria estas porcarias e faria um serviço melhor e mais claro de ser trabalhado e retrabalhado, então esta busca de automatizar a programação é a negação de aprender a Linguagem e saber o que está fazendo.
O tempo é o mesmo e o conhecimento é muito maior, com o mesmo tempo saberá fazer muito mais do que a limitada cabeça de um desenvolvedor te restringirá no crescimento e no desenvolvimento de um sistema..
Obrigado.

AS

Bem, eu acho a sua opinião equivocada, mas todas as pessoa tem direito as "preferências pessoais". Acredito que vc esta tentando convencer a si mesmo que está agindo correto, portanto sugiro-lhe não desperdiçar o seu tempo neste forum onde as pessoas desejam aprender e compartilhar informações sobre o ADIANTI FRAMEWORK. Desejo-lhe pleno sucesso em todas as suas iniciativas com o Adianti ou sem ele. COM AMOR, PAZ E BEM!
EJ

Pessoal, na boa, como os amigos aqui disseram, temos respeitar a opinião de todos, mais eu nunca programei em PHP, na vida, sempre Delphi, Java, precisei de algo rápido para um portal+oracle(alias tive customizar a classe de conexão), um pouco complexo, com gráficos, mapas etc, e sinceramente fiz em 1 mês, alias segui as orientações de criação de componente do tutor, criei componentes para integrar highcharts, google maps tudo Javascript, e na boa da para fazer o que vc quiser com essa frame, e ela é sim, muito bem feita, pois é simples e objetiva, unica coisa que falta, seria, o Pablo eleger 1 usuário pelo menos, como master para responder, as perguntas, sei que isso gera custo, mais se for intenção de realmente comercializar em versão mais profissional, por exemplo, a parte de report pivot grid, etc, isso poderia ser embutido na frame, eu compraria, e outra coisa uma dica, PRECISAMOS DE UM ROADMAP para frame para saber qual rumo seguir, abraço.
AL

Creio que tenho meu ponto de vista e minha opinião, reafirmo que esta experiência mostrou-me que temos que aprender tudo sobre as linguagens e depois montar nossos próprios FRAMEWORKS, como o Pablo fez, assim conseguimos compreender todas as funções que temos e como elas agem, por mais que digam, eu sei como funciona, infelizmente não sabe, quem sabe é quem faz.
Se vocês querem se especializar em um FRAMEWORK, ótimo, é sua visão e o método que quer construir seu conhecimento.
Obrigado a todos!
AM

"PRECISAMOS DE UM ROADMAP", foi a opinião mais construtiva que eu ja li aqui no forum!

Realmente o ideal é podermos dar um rumo ao framework junto a adianti, assim evoluiriamos para algo bem maior.

#ComposerJá
DR

Tive que aprender PHP e PHP OO antes de iniciar com o Adianti, comprei o kit dev e estou satisfeito até o momento; estou saindo do delphi. Talvez fosse interessante à empresa Adianti criar um serviço de suporte com mensalidade para um 'suporte vip e ágil', quem tem dificuldades assinaria este serviço pelo tempo que lhe fosse necessário. Mas vendo os videos, lendo o livro e estudando os exemplos, da pra fazer muita coisa; vejo que a maior dificuldade é entender as regras de negócio. [não me refiro ao adianti], vejo exemplos no github de projetos de controle de estoque por ex... em php com outros frameworks ou php puro, vc analisa a base de dados e já nota a falta de noção das regras de negocio, mas interface é excelente, mesmo quando as regras de negocio pecam.
PD

Estamos com o Nataniel desde o mês de Agosto revisando constantemente as últimas perguntas do Fórum para ajudar as pessoas. Obrigado pelo feedback, mesmo não cobrando por esse serviço, vamos manter um profissional revisando o fórum. No segundo semestre teremos um grande release, aguardem e confiem.

Forte abraço,
RP

Alguma previsão de RoadMap? que tal uma enquete???
PL

uma opinião bem atrasada sobre o assunto

Comesse a utilizar Synfony FrameWork

Em poucos segundos você volta correndo pro Adianti FrameWork e nunca mais vai abandonar..

ehehehhe.



AC

Boa noite.

Me desculpem por seguir nesse post, mas, acho que nós poderíamos nos organizar e criar uma escala pq, de boa, o cara já cria um framework foda, cobra um preço bacana pelas ferramentas, mantém uma documentação muito boa e ainda tem que ficar organizando plantões de suporte e moderadores...?
Vejo muitas perguntas ficando pendentes no forum sim, mas, convenhamos que a imensa maioria delas são fundamentais sobre PHP, sendo que o conhecimento é pré-requisito para uso do Adianti. Acho que, nesse caso, cabe a NÓS responder e socorrer os caras que não sabem o básico da linguagem.
Um recurso que provavelmente funcione e incentive as respostas a esses questionamentos e mesmo aos outros seria um ranqueamento de usuários por suas perguntas e respostas, a exemplo do que vemos no fórum do... ou da... Caelum. Mas, isso é só uma sugestão, talvez a nossa organização seja suficiente, uma vez que ensinando aprendemos bastante também.
Uma outra coisa, bom nãos sei se já existe isso, seria um tipo de recenseamento ou inventário, sei lá, das aplicações já feitas com Adianti, isso vai ajudar inclusive a nortear novos usuários e divulgar o framework e os nossos trabalhos. Eu tive a oportunidade, inclusive, de falar com pessoal do setor de desenvolvimento do Ricardo Eletro sobre o framework e ficaram hiper admirados. Imaginem só uma empresa como essa utilizar o Adianti.
Então, amigos, o crescimento de muitos frameworks depende da sua COMUNIDADE. Essa organização não serve somente para expor conhecimento e sim para expor e viabilizar a difusão da ferramenta que utilizamos, pois, se a ferramenta cresce ela se valoriza e o nosso experti$e também. Pensem nisso.
AS

Pessoa entendo , a frustração de vocês o framework não é bala de prata mas para sistemas ele atende bem acompanho ele desde seu inicio entre discussões com o Pablo sobre melhorias cada versão nova ele nos surpreende acredito que a falta de alguem para ajudar é realmente um empecilho, mas fico a disposição para sanar suas duvidas, e ate mesmo no nosso canal no telegram ou podem me chamar no pv por la mesmo abraços.

Grupo Telegram https://t.me/Adcommunityedition
BJ

Quando comecei a trabalhar com o Adianti, eu já programava a quase 25 anos com Delphi/Lazarus, e de php, poo, css, html, js e tudo mais relacionado a programação web eu simplesmente era 100% leigo, eu estava procurando uma solução rápida pra entrar neste mercado porque não havia mais nada pra mim na programação para desktop, e antes de conhecer o Adianti tentei cheguei a comprar uma licença do ScriptCase, mas o que ele gerava era muito engessado e lento, então comprei um livro, um curso em vídeo aulas e o Studio Professional, 3 meses depois pintou o primeiro projeto, em 3 meses sem praticamente conhecimento algum eu consegui entregar o sistema e o cliente ficou satisfeito, e neste processo, cheguei a contratar alguma consultoria de alguém que conhecia o adianto pra desenrolar rápido a integração com o PagSeguro na época mas no final tudo deu certo.

Recentemente, ou seja mais de 5 anos depois, aos 51 anos de idade, comprei o curso Dominando o Adianti 7 que me agregou muito conhecimento, e logo em seguida comprei o o curso de POO em PHP também do Pablo e estou fazendo cursos de html, css e js e agora é que realmente comecei a entender com mais clareza o código fonte do Adianti e do Template, cheguei até mesmo a criar um fork do Template com inúmeras modificações para minhas necessidades específicas, especialmente porque meu sistema é para locação e vou mantar o dados das empresas em um só banco, alterei toda a parte de segurança, registro, mudei cores, fontes, até mesmo componentes como o TPageNavigation e outros.

Posso dizer que tenho muita dificuldade de aprender, porque acho que estou cansado da luta da vida, mas não desisto e não me deixo ser vencido pelas minhas limitações, mesmo respeitando o ponto de vista do colega que abriu este post, e até concordando com ele a respeito de várias das suas opiniões, eu não desisti porque acho que não enxergava outra alternativa melhor, o Adianti é simples e facilita tremendamente a vida de quem precisa de agilidade, além do mais nada é perfeito.

Quanto ao opinião específica a cerca do Pablo só estar interessado em vender os seus materiais, eu não concordo com isso, acredito que todos somos profissionais e código aberto não significa dar de graça, você obtém o código mas o conhecimento é outra coisa, no Adianti o conhecimento de qualidade é barato e o potencial de ganho é muito bom, é possível desenvolver rapidamente excelentes soluções e sem falar que o Pablo tem que manter o seu pessoal, pagar os salários de todos, sem falar nas demais despesas.

Achei importante postar este contra ponto, como respeito e sensibilidade porque toda moeda tem dois lados.

Segue o link para quem quiser visitar meu sistema poder ver o que um leigo com esforço, boa vontade e perseverança consegue fazer se não desistir:

https://suiterp.com.br/webapp/index.php?class=SysRequestPasswordVisitorForm

Sucesso a todos.
AC

É assim que se fala!
AL

Bom, vou retornar com o uso do ADIANTI FRAMEWORK, estou convencido que o curso que estou fazendo, muito bom por sinal, as integrações passadas pelo Pablo em todo o conteúdo com o Kanban, Calendar e outros foram muito importantes para retornar a utilizar o Adianti, e estou apresentando ele na Faculdade que faço hoje, ele está muito bom, excelente, o Adianti 7 deixou-me encantado com o código e entendo melhor hoje a necessidade de saber mais e estudar mais sobre os códigos.
Mas acho que a simplicidade está vindo a tona nele, isso será muito importante para seu crescimento, assim que terminar o trabalho que estou fazendo com ele, vou portar pra todos.
Como já passei ao Pablo, parabéns pela persistência e pelas melhorias que estão acompanhando o tempo e o desenvolvimento sério da ferramenta. Show!
FC

Ficamos velhos rápido, e sábios tarde.
BJ

Fico satisfeito por Antônio Garcia e concordo plenamente com Felipe Cortez, vamos tocar o barco e valorizar o que é nosso, o Adianti é brasileiro! Tenho orgulho do trabalho do Pablo, nem o conheço pessoalmente, só falei com ele ao telefone umas duas vezes, mas a sua simplicidade e humildade são tão visíveis quanto sua genialidade. Agradeço a Deus pela vida do Pablo e da sua equipe, porque trabalho é dignidade e me sinto digno por estar trabalhando em busca do meu espaço ao sol, e se não fosse pelo Adianti provavelmente eu não estaria tão motivado a perseverar nesta profissão.