Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Dashboard duplicando o valores na inserção de dados Estou com seguinte erro RANKING TOP 5 CLIENTES. Quando faço uma inserção de outros dados ou seja de contratos, exibe o mesmo valor do dado anterior para o próximo dado -- view create view view_contratos as select c.id as contrato_id, c.cliente_id, c.tipo_contrato_id, c.dt_inicio, c.dt_fim, tc.no_nome as tipo_contrato , p.nome as nome_cliente, ...
HL
Dashboard duplicando o valores na inserção de dados  
Estou com seguinte erro RANKING TOP 5 CLIENTES. Quando faço uma inserção de outros dados ou seja de contratos, exibe o mesmo valor do dado anterior para o próximo dado


-- view
create view view_contratos as
select c.id as contrato_id,
c.cliente_id,
c.tipo_contrato_id,
c.dt_inicio,
c.dt_fim,
tc.no_nome as tipo_contrato ,
p.nome as nome_cliente,
m.no_nome as cidade,
e.sg_uf as uf,
e.no_nome as nome_estado,
g.no_nome as nome_grupo,
st_ativo as ativo,
(select sum(nu_total) as total from rl_contrato_servico cs join tb_contrato c
on c.id =cs.contrato_id ) as "total"
from tb_contrato c join tb_tipo_contrato tc
on tc.id = c.tipo_contrato_id
join tb_pessoa p
on p.id = c.cliente_id
join tb_municipio m
on m.id = p.municipio_id
join tb_estado e
on e.id = m.estado_id
join tb_grupo g
on g.id = p.grupo_id;


  1. <?php
  2. /**
  3.  * ContratoDashboard
  4.  *
  5.  * @version    1.0
  6.  * @subpackage control
  7.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  8.  * @license    http://www.adianti.com.br/framework-license
  9.  */
  10. class ContratoDashboard extends TPage
  11. {
  12.     /**
  13.      * Class constructor
  14.      * Creates the page
  15.      */
  16.     function __construct()
  17.     {
  18.         parent::__construct();
  19.         
  20.         $vbox = new TVBox;
  21.         $vbox->style 'width: 100%';
  22.         
  23.         $div = new TElement('div');
  24.         $div->class "row";
  25.         
  26.         try
  27.         {
  28.             TTransaction::open('sys_db');
  29.             $total_ativos  Contrato::where('st_ativo','=','Y')->count();
  30.             $total_renovar Contrato::where('st_ativo','=','Y')->where('dt_fim''<='date('Y-m-d'))->count();
  31.             $contratos_grupo ViewContratos::where('ativo','=','Y')->groupBy('nome_grupo')->sumBy('total');
  32.             $contratos_tipo  ViewContratos::where('ativo','=','Y')->groupBy('tipo_contrato')->sumBy('total');
  33.             $top_clientes    ViewContratos::where('ativo','=','Y')->groupBy('nome_cliente')->take(5)->orderBy('total''desc')->sumBy('total');
  34.             $old_clientes    ViewContratos::where('ativo','=','Y')->take(5)->orderBy('dt_inicio')->load();
  35.             var_dump($top_clientes);
  36.             TTransaction::close();
  37.             
  38.             
  39.             $indicator1 = new THtmlRenderer('app/resources/info-box.html');
  40.             $indicator1->enableSection('main', ['title' => 'Contratos ativos''icon' => 'check-double''background' => 'green''value' => $total_ativos ] );
  41.             
  42.             
  43.             $indicator2 = new THtmlRenderer('app/resources/info-box.html');
  44.             $indicator2->enableSection('main', ['title' => 'Renovações pendentes''icon' => 'hourglass-start''background' => 'orange''value' => $total_renovar ] );
  45.             
  46.             $data = [];
  47.             $data[] = [ 'Estado''Contratos' ];
  48.             if ($contratos_grupo)
  49.             {
  50.                 foreach($contratos_grupo as $contrato_grupo)
  51.                 {
  52.                     $data[] = [ $contrato_grupo->nome_grupo, (float) $contrato_grupo->total ];
  53.                 }
  54.             }
  55.             $grafico1 = new THtmlRenderer('app/resources/google_pie_chart.html');
  56.             $grafico1->enableSection('main', ['data'   => json_encode($data), 'width'  => '100%''height'  => '400px',
  57.                                               'title'  => 'Contratos por grupo''ytitle' => 'Estado''xtitle' => 'Contratos''uniqid' => uniqid()]);
  58.             
  59.             
  60.             
  61.             $data = [];
  62.             $data[] = [ 'Estado''Contratos' ];
  63.             if ($contratos_tipo)
  64.             {
  65.                 foreach($contratos_tipo as $contrato_tipo)
  66.                 {
  67.                     $data[] = [ $contrato_tipo->tipo_contrato, (float) $contrato_tipo->total ];
  68.                 }
  69.             }
  70.             $grafico2 = new THtmlRenderer('app/resources/google_pie_chart.html');
  71.             $grafico2->enableSection('main', ['data'   => json_encode($data), 'width'  => '100%''height'  => '400px',
  72.                                               'title'  => 'Contratos por tipo''ytitle' => 'Tipo''xtitle' => 'Contratos''uniqid' => uniqid()]);
  73.             
  74.             
  75.             
  76.             $table1 TTable::create( [ 'class' => 'table table-striped table-hover''style' => 'border-collapse:collapse' ] );
  77.             $table1->addSection('thead');
  78.             $table1->addRowSet('Cliente''Quantidade');
  79.             
  80.             if ($top_clientes)
  81.             {
  82.                 $table1->addSection('tbody');
  83.                 foreach ($top_clientes as $top_cliente)
  84.                 {
  85.                     $row $table1->addRow();
  86.                     $row->addCell($top_cliente->nome_cliente);
  87.                     $row->addCell('R$&nbsp;' number_format($top_cliente->total,2,',','.'))->style 'text-align:right';
  88.                 }
  89.             }
  90.             
  91.             $table2 TTable::create( [ 'class' => 'table table-striped table-hover''style' => 'border-collapse:collapse' ] );
  92.             $table2->addSection('thead');
  93.             $table2->addRowSet('Cliente''Data');
  94.             
  95.             if ($old_clientes)
  96.             {
  97.                 $table2->addSection('tbody');
  98.                 foreach ($old_clientes as $old_cliente)
  99.                 {
  100.                     $row $table2->addRow();
  101.                     $row->addCell($old_cliente->nome_cliente);
  102.                     $row->addCell(TDate::convertToMask($old_cliente->dt_inicio'yyyy-mm-dd''dd/mm/yyyy'));
  103.                 }
  104.             }
  105.             
  106.             $div->addTElement::tag('div'$indicator1, ['class' => 'col-sm-6']) );
  107.             $div->addTElement::tag('div'$indicator2, ['class' => 'col-sm-6']) );
  108.             $div->addTElement::tag('div'$grafico1,   ['class' => 'col-sm-6']) );
  109.             $div->addTElement::tag('div'$grafico2,   ['class' => 'col-sm-6']) );
  110.             $div->addTElement::tag('div'TPanelGroup::pack('Ranking TOP 5 Clientes'$table1),     ['class' => 'col-sm-6']) );
  111.             $div->addTElement::tag('div'TPanelGroup::pack('Raking 5 Clientes mais antigos'$table2),     ['class' => 'col-sm-6']) );
  112.             
  113.             //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  114.             $vbox->add($div);
  115.         }
  116.         catch (Exception $e)
  117.         {
  118.             new TMessage('error'$e->getMessage());
  119.         }
  120.         
  121.         parent::add($vbox);
  122.     }
  123. }
  1. <?php
  2. /**
  3.  * ContratoForm
  4.  *
  5.  * @version    1.0
  6.  * @subpackage control
  7.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  8.  * @license    http://www.adianti.com.br/framework-license
  9.  */
  10. class ContratoForm extends TWindow
  11. {
  12.     protected $form// form
  13.     protected $fieldlist;
  14.     
  15.     /**
  16.      * Class constructor
  17.      * Creates the page and the registration form
  18.      */
  19.     function __construct($param)
  20.     {
  21.         parent::__construct($param);
  22.         parent::setSize(0.8null);
  23.         parent::removePadding();
  24.         parent::removeTitleBar();
  25.         //parent::disableEscape();
  26.         
  27.         // creates the form
  28.         $this->form = new BootstrapFormBuilder('form_Contrato');
  29.         $this->form->setFormTitle('Contrato');
  30.         $this->form->setClientValidation(true);
  31.         
  32.         // master fields
  33.         $id = new TEntry('id');
  34.         $cliente_id = new TDBUniqueSearch('cliente_id''sys_db''Pessoa''id''nome_fantasia');
  35.         $tipo_contrato_id = new TDBUniqueSearch('tipo_contrato_id''sys_db''TipoContrato''id''no_nome');
  36.         $ativo = new TRadioGroup('st_ativo');
  37.         $dt_inicio = new TDate('dt_inicio');
  38.         $dt_fim = new TDate('dt_fim');
  39.         $obs = new TText('ds_obs');
  40.         $cliente_id->setMinLength(0);
  41.         $tipo_contrato_id->setMinLength(0);
  42.         $ativo->addItems( ['Y' => 'Sim''N' => 'Não'] );
  43.         $ativo->setLayout('horizontal');
  44.         
  45.         $dt_inicio->setMask('dd/mm/yyyy');
  46.         $dt_fim->setMask('dd/mm/yyyy');
  47.         $dt_inicio->setDatabaseMask('yyyy-mm-dd');
  48.         $dt_fim->setDatabaseMask('yyyy-mm-dd');
  49.         $dt_inicio->setSize('100%');
  50.         $dt_fim->setSize('100%');
  51.         $obs->setSize('100%'60);
  52.         $ativo->setValue('Y');
  53.         
  54.         $cliente_id->addValidation('Cliente', new TRequiredValidator);
  55.         $tipo_contrato_id->addValidation('Tipo contrato', new TRequiredValidator);
  56.         $ativo->addValidation('Ativo', new TRequiredValidator);
  57.         $dt_inicio->addValidation('Data início', new TRequiredValidator);
  58.         $dt_fim->addValidation('Data fim', new TRequiredValidator);
  59.         // sizes
  60.         $id->setSize('100%');
  61.         $cliente_id->setSize('100%');
  62.         $tipo_contrato_id->setSize('100%');
  63.         $ativo->setSize('100%');
  64.         $dt_inicio->setSize('100%');
  65.         $dt_fim->setSize('100%');
  66.         $id->setEditable(FALSE);
  67.         
  68.         // add form fields to the form
  69.         $this->form->addFields( [new TLabel('Id')], [$id] );
  70.         $this->form->addFields( [new TLabel('Cliente')], [$cliente_id] );
  71.         $this->form->addFields( [new TLabel('Tipo Contrato')], [$tipo_contrato_id] );
  72.         $this->form->addFields( [new TLabel('Ativo')], [$ativo] );
  73.         $this->form->addFields( [new TLabel('Dt Inicio')], [$dt_inicio], [new TLabel('Dt Fim')], [$dt_fim] );
  74.         $this->form->addFields( [new TLabel('Obs')], [$obs] );
  75.         
  76.         
  77.         // detail fields
  78.         $this->fieldlist = new TFieldList;
  79.         $this->fieldlist-> width '100%';
  80.         $this->fieldlist->enableSorting();
  81.         $servico_id = new TDBUniqueSearch('list_servico_id[]''sys_db''Servico''id''no_nome'nullTCriteria::create( ['st_ativo' => 'Y'] ));
  82.         $valor = new TNumeric('list_valor[]'2',''.');
  83.         $quantidade = new TNumeric('list_quantidade[]'2',''.');
  84.         
  85.         $servico_id->setChangeAction(new TAction(array($this'onChangeServico')));
  86.         
  87.         $servico_id->setSize('100%');
  88.         $servico_id->setMinLength(0);
  89.         $valor->setSize('100%');
  90.         $quantidade->setSize('100%');
  91.         $this->fieldlist->addField'<b>Serviço</b>'$servico_id, ['width' => '40%']);
  92.         $this->fieldlist->addField'<b>Valor</b>'$valor, ['width' => '30%']);
  93.         $this->fieldlist->addField'<b>Quantidade</b>'$quantidade, ['width' => '30%']);
  94.         $this->form->addField($servico_id);
  95.         $this->form->addField($valor);
  96.         $this->form->addField($quantidade);
  97.         
  98.         $detail_wrapper = new TElement('div');
  99.         $detail_wrapper->add($this->fieldlist);
  100.         $detail_wrapper->style 'overflow-x:auto';
  101.         
  102.         $this->form->addContent( [ TElement::tag('h5''Itens do contrato', [ 'style'=>'background: whitesmoke; padding: 5px; border-radius: 5px; margin-top: 5px'] ) ] );
  103.         $this->form->addContent( [ $detail_wrapper ] );
  104.         
  105.         // create actions
  106.         //$this->form->addAction( _t('Save'),  new TAction( [$this, 'onSave'] ),  'fa:save green' );
  107.         $btn $this->form->addAction_t('Save'),  new TAction( [$this'onSave'] ),  'fa:save default' );
  108.         $btn->class 'btn btn-sm btn-success';
  109.         $this->form->addAction_t('Clear'), new TAction( [$this'onClear'] ), 'fa:eraser red' );
  110.         $this->form->addHeaderActionLink_t('Close'), new TAction([$this'onClose']), 'fa:times red');
  111.         // create the page container
  112.         $container = new TVBox;
  113.         $container->style 'width: 100%';
  114.         //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  115.         $container->add($this->form);
  116.         parent::add($container);
  117.     }
  118.     
  119.     /**
  120.      * Executed whenever the user clicks at the edit button da datagrid
  121.      */
  122.     function onEdit($param)
  123.     {
  124.         try
  125.         {
  126.             TTransaction::open('sys_db');
  127.             
  128.             if (isset($param['key']))
  129.             {
  130.                 $key $param['key'];
  131.                 
  132.                 $object = new Contrato($key);
  133.                 $this->form->setData($object);
  134.                 
  135.                 $items  ContratoItem::where('contrato_id''='$key)->load();
  136.                 
  137.                 if ($items)
  138.                 {
  139.                     $this->fieldlist->addHeader();
  140.                     
  141.                     foreach($items  as $item )
  142.                     {
  143.                         $detail = new stdClass;
  144.                         $detail->list_servico_id $item->servico_id;
  145.                         $detail->list_valor $item->nu_valor;
  146.                         $detail->list_quantidade $item->qt_qtde;
  147.                         $this->fieldlist->addDetail($detail);
  148.                     }
  149.                     
  150.                     $this->fieldlist->addCloneAction();
  151.                 }
  152.                 else
  153.                 {
  154.                     $this->onClear($param);
  155.                 }
  156.                 
  157.                 TTransaction::close(); // close transaction
  158.             }
  159.             else
  160.             {
  161.                 $this->onClear($param);
  162.             }
  163.         }
  164.         catch (Exception $e// in case of exception
  165.         {
  166.             new TMessage('error'$e->getMessage());
  167.             TTransaction::rollback();
  168.         }
  169.     }
  170.     
  171.     /**
  172.      * Clear form
  173.      */
  174.     public function onClear($param)
  175.     {
  176.         $this->fieldlist->addHeader();
  177.         $this->fieldlist->addDetail( new stdClass );
  178.         $this->fieldlist->addCloneAction();
  179.     }
  180.     
  181.     /**
  182.      * Save the Contrato and the ContratoItem's
  183.      */
  184.     public static function onSave($param)
  185.     {
  186.         try
  187.         {
  188.             TTransaction::open('sys_db');
  189.             
  190.             $id = (int) $param['id'];
  191.             $master = new Contrato;
  192.             $master->fromArray$param);
  193.             $master->dt_inicio TDateTime::convertToMask($param['dt_inicio'], 'dd/mm/yyyy''yyyy-mm-dd');
  194.             $master->dt_fim    TDateTime::convertToMask($param['dt_fim'],    'dd/mm/yyyy''yyyy-mm-dd');
  195.             $master->store(); // save master object
  196.             
  197.             // delete details
  198.             ContratoItem::where('contrato_id''='$master->id)->delete();
  199.             
  200.             if( !empty($param['list_servico_id']) AND is_array($param['list_servico_id']) )
  201.             {
  202.                 foreach( $param['list_servico_id'] as $row => $servico_id)
  203.                 {
  204.                     if (!empty($servico_id))
  205.                     {
  206.                         $detail = new ContratoItem;
  207.                         $detail->contrato_id $master->id;
  208.                         $detail->servico_id $param['list_servico_id'][$row];
  209.                         $detail->valor =      (float) str_replace(['.',','], ['','.'], $param['list_valor'][$row]);
  210.                         $detail->quantidade = (float) str_replace(['.',','], ['','.'], $param['list_quantidade'][$row]);
  211.                         $detail->total round($detail->valor $detail->quantidade,2);
  212.                         $detail->store();
  213.                     }
  214.                 }
  215.             }
  216.             $data = new stdClass;
  217.             $data->id $master->id;
  218.             TForm::sendData('form_Contrato'$data);
  219.             TTransaction::close(); // close the transaction
  220.             
  221.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'));
  222.         }
  223.         catch (Exception $e// in case of exception
  224.         {
  225.             new TMessage('error'$e->getMessage());
  226.             TTransaction::rollback();
  227.         }
  228.     }
  229.     
  230.     
  231.     /**
  232.      * Change servico
  233.      */
  234.     public static function onChangeServico($param)
  235.     {
  236.         $input_id $param['_field_id'];
  237.         $servico_id $param['_field_value'];
  238.         $input_pieces explode('_'$input_id);
  239.         $unique_id end($input_pieces);
  240.         
  241.         if ($servico_id)
  242.         {
  243.             $response = new stdClass;
  244.             
  245.             try
  246.             {
  247.                 TTransaction::open('sys_db');
  248.                 
  249.                 $servico Servico::find($servico_id);
  250.                 $response->{'list_quantidade_'.$unique_id} = '1,00';
  251.                 $response->{'list_valor_'.$unique_id} = number_format($servico->nu_valor,2,',''.');
  252.                 
  253.                 TForm::sendData('form_Contrato'$response);
  254.                 TTransaction::close();
  255.             }
  256.             catch (Exception $e)
  257.             {
  258.                 TTransaction::rollback();
  259.             }
  260.         }
  261.     }
  262.     
  263.     /**
  264.      * Close
  265.      */
  266.     public static function onClose($param)
  267.     {
  268.         parent::closeWindow();
  269.     }
  270. }

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