Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TMultiFile problema na Edição ! etsou uasndo o TMultiFile para salvar imagem do produto. Na inclusao ele funciona. Quando abro a tela para Edição ele mostra a imagem. Mas quando vou salvar a edicao da erro : Segue as classes utilziadas e o formulario. ERRO : SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "files/images/1/icon.png" ---------------------------------------------...
PG
TMultiFile problema na Edição !  
etsou uasndo o TMultiFile para salvar imagem do produto.
Na inclusao ele funciona.
Quando abro a tela para Edição ele mostra a imagem.

Mas quando vou salvar a edicao da erro :
Segue as classes utilziadas e o formulario.
ERRO : SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "files/images/1/icon.png"

------------------------------------------------------------------------------------------------------------------
  1. <?php
  2. /**
  3.  * Produto Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Produto extends TRecord
  7. {
  8.     const TABLENAME '"public"."produto"';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.     const CREATEDAT 'created_at';
  12.     const UPDATEDAT 'updated_at';
  13.         
  14.     
  15.     /**
  16.      * Constructor method
  17.      */
  18.     public function __construct($id NULL$callObjectLoad TRUE)
  19.     {
  20.         parent::__construct($id$callObjectLoad);
  21.         parent::addAttribute('usuarioinclusao_id');
  22.         parent::addAttribute('usuarioalteracao_id');
  23.         parent::addAttribute('unidade_id');
  24.         parent::addAttribute('sdescricao');
  25.         parent::addAttribute('sdescricaonf');
  26.         parent::addAttribute('sreferencia');
  27.         parent::addAttribute('created_at');
  28.         parent::addAttribute('updated_at');
  29.         parent::addAttribute('marca_id');
  30.         parent::addAttribute('grupoproduto_id');
  31.         parent::addAttribute('npesoliquido');
  32.         parent::addAttribute('npesobruto');
  33.         parent::addAttribute('nprecocusto');
  34.         parent::addAttribute('nprecovenda');
  35.         parent::addAttribute('nporcentagemlucrodesejado');
  36.         parent::addAttribute('nlucrodesejado');
  37.         parent::addAttribute('nprecosugerido');
  38.         parent::addAttribute('fornecedor_id');
  39.         parent::addAttribute('stipoproduto');
  40.         parent::addAttribute('nprecopromocao');
  41.         parent::addAttribute('sativapromocao');
  42.         parent::addAttribute('nestoqueminimo');
  43.         parent::addAttribute('nestoquemaximo');
  44.         parent::addAttribute('nestoquesaldo');
  45.         parent::addAttribute('sespecificacao');
  46.         parent::addAttribute('scodigogtin');
  47.         parent::addAttribute('scodigoanp');
  48.         parent::addAttribute('sippt');
  49.         parent::addAttribute('siat');
  50.         parent::addAttribute('slocalizacaocorredor');
  51.         parent::addAttribute('slocalizacaoposicaohorizontal');
  52.         parent::addAttribute('slocalizacaoposicaovertical');
  53.         parent::addAttribute('ncm_id');
  54.         parent::addAttribute('scodigogtintrib');
  55.         parent::addAttribute('dt_ultimacompra');
  56.     }
  57.     
  58.     public function get_unidade()
  59.     {
  60.         return Unidade::find($this->unidade_id);
  61.     }    
  62.     public function get_marca()
  63.     {
  64.         return Marca::find($this->marca_id);
  65.     }    
  66.     public function get_grupoproduto()
  67.     {
  68.         return Grupoproduto::find($this->grupoproduto_id);
  69.     }    
  70.     public function get_fornecedor()
  71.     {
  72.         return Pessoa::find($this->fornecedor_id);
  73.     }    
  74.     public function get_ncm()
  75.     {
  76.         return Ncm::where(scodigoncm,'=',$this->ncm_id)->load()->first();
  77.     }    
  78. }
  1. <?php
  2. /**
  3.  * ProdutoImagem Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class ProdutoImagem extends TRecord
  7. {
  8.     const TABLENAME '"public"."produto_imagem"';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.     
  12.     const CREATEDAT 'created_at';
  13.     const UPDATEDAT 'updated_at';
  14.             
  15.     /**
  16.      * Constructor method
  17.      */
  18.     public function __construct($id NULL$callObjectLoad TRUE)
  19.     {
  20.         parent::__construct($id$callObjectLoad);
  21.         parent::addAttribute('produto_id');
  22.         parent::addAttribute('spath');
  23.         parent::addAttribute('created_at');
  24.         parent::addAttribute('updated_at');
  25.     }
  26. }
  1. <?php
  2. /**
  3.  * ProdutoForm Form
  4.  * @author  <your name here>
  5.  */
  6. class ProdutoForm extends TWindow
  7. {
  8.     protected $form// form
  9.     use Adianti\Base\AdiantiFileSaveTrait;    
  10.     
  11.     /**
  12.      * Form constructor
  13.      * @param $param Request
  14.      */
  15.     public function __construct$param )
  16.     {
  17.         parent::__construct();
  18.         parent::include_js('app/lib/include/application.js');         
  19.         parent::setSize(0.80.80);
  20.         parent::removePadding();
  21.         parent::removeTitleBar();        
  22.         
  23.         
  24.         
  25.         // creates the form
  26.         $this->form = new BootstrapFormBuilder('form_Produto');
  27.         $this->form->setFormTitle('Produto');
  28.         // create the form fields
  29.         $id = new TEntry('id');
  30.         $usuarioinclusao_id  = new TEntry('usuarioinclusao_id');
  31.         $usuarioalteracao_id = new TEntry('usuarioalteracao_id');
  32.         $unidade_id = new TDBUniqueSearch('unidade_id''tutorerpdfe''Unidade''id''sdescricao');
  33.         $sdescricao = new TEntry('sdescricao');
  34.         $sdescricaonf = new TEntry('sdescricaonf');
  35.         $sreferencia = new TEntry('sreferencia');
  36.         $marca_id = new TDBUniqueSearch('marca_id''tutorerpdfe''Marca''id''snome');
  37.         $grupoproduto_id = new TDBUniqueSearch('grupoproduto_id''tutorerpdfe''Grupoproduto''id''snome');
  38.         $npesoliquido = new TEntry('npesoliquido');
  39.         $npesobruto = new TEntry('npesobruto');
  40.         $nprecocusto = new TEntry('nprecocusto');
  41.         $nprecovenda = new TEntry('nprecovenda');
  42.         $nporcentagemlucrodesejado = new TEntry('nporcentagemlucrodesejado');
  43.         $nlucrodesejado = new TEntry('nlucrodesejado');
  44.         $nprecosugerido = new TEntry('nprecosugerido');
  45.         $fornecedor_id =  new TDBUniqueSearch('fornecedor_id''tutorerpdfe''Pessoa''id''nome');
  46.         $stipoproduto = new TCombo('stipoproduto');
  47.         $nprecopromocao = new TEntry('nprecopromocao');
  48.         $sativapromocao = new TCombo('sativapromocao');
  49.         $nestoqueminimo = new TEntry('nestoqueminimo');
  50.         $nestoquemaximo = new TEntry('nestoquemaximo');
  51.         $nestoquesaldo = new TEntry('nestoquesaldo');
  52.         $sespecificacao = new TText('sespecificacao');
  53.         $scodigogtin = new TEntry('scodigogtin');
  54.         $scodigoanp = new TEntry('scodigoanp');
  55.         $sippt = new TCombo('sippt');
  56.         $siat = new TCombo('siat');
  57.         $slocalizacaocorredor = new TEntry('slocalizacaocorredor');
  58.         $slocalizacaoposicaohorizontal = new TEntry('slocalizacaoposicaohorizontal');
  59.         $slocalizacaoposicaovertical = new TEntry('slocalizacaoposicaovertical');
  60.         $ncm_id = new TDBUniqueSearch('ncm_id''tutorerpdfe''Ncm''scodigoncm''scodigoncm');
  61.         $scodigogtintrib = new TEntry('scodigogtintrib');
  62.         $dt_ultimacompra = new TDate('dt_ultimacompra');
  63.         $spath      = new TMultiFile('spath');
  64.         
  65.         $this->form->addField$usuarioinclusao_id  );
  66.         $this->form->addField$usuarioalteracao_id  );
  67.         // add the fields
  68.         $row=$this->form->addFields( [ new TLabel('Id') ], [ $id ] );
  69.         $row->class 'form-control-sm';           
  70.         $row=$this->form->addFields( [ new TLabel('Descricao','red') ], [ $sdescricao ] , [ new TLabel('Descricao NFe','red') ], [ $sdescricaonf ] );
  71.         $row->class 'form-control-sm';           
  72.         $row=$this->form->addFields( [ new TLabel('Referencia','red') ], [ $sreferencia ] , [ new TLabel('Unidade','red') ], [ $unidade_id ] );
  73.         $row->class 'form-control-sm';           
  74.         $row=$this->form->addFields( [ new TLabel('Marca','red') ], [ $marca_id ] , [ new TLabel('Grupo Produto','red') ], [ $grupoproduto_id ] );
  75.         $row->class 'form-control-sm';           
  76.         $row=$this->form->addFields( [ new TLabel('R$ Custo') ], [ $nprecocusto ] , [ new TLabel('R$ Venda') ], [ $nprecovenda ]);
  77.         $row->class 'form-control-sm';           
  78.         $row=$this->form->addFields(  [ new TLabel('Peso Liq.') ], [ $npesoliquido ] , [ new TLabel('Peso Br.') ], [ $npesobruto 
  79.                                       );
  80.                                      
  81.         $row->class 'form-control-sm';           
  82.         $row=$this->form->addFields( [ new TLabel('% Lucro Desejado') ], [ $nporcentagemlucrodesejado ] ,
  83.                                      [ new TLabel('Lucro Desejado') ], [ $nlucrodesejado ] ,  
  84.                                      [ new TLabel('Preco Sugerido') ], [ $nprecosugerido ] );
  85.         $row->class 'form-control-sm';           
  86.         $row=$this->form->addFields( [ new TLabel('Fornecedor','red') ], [ $fornecedor_id ] ,[ new TLabel('Dt Ultima Compra') ], [ $dt_ultimacompra ] );
  87.         $row->class 'form-control-sm';           
  88.         $row=$this->form->addFields( [ new TLabel('Tipo Produto','red') ], [ $stipoproduto ] , 
  89.                                         [ new TLabel('Preco Promoção') ], [ $nprecopromocao ] , 
  90.                                         [ new TLabel('Promoção Ativa') ], [ $sativapromocao ] );
  91.                                         
  92.         $row->layout = [ 'col-sm-2 control-label''col-sm-3'
  93.                           'col-sm-2 control-label''col-sm-2',
  94.                           'col-sm-2 control-label''col-sm-1' ];        
  95.                                         
  96.         $row->class 'form-control-sm';           
  97.         $row=$this->form->addFields( [ new TLabel('Estoque Minimo') ], [ $nestoqueminimo ] ,
  98.                                      [ new TLabel('Estoque Maximo') ], [ $nestoquemaximo ] ,
  99.                                      [ new TLabel('Estoque Saldo') ], [ $nestoquesaldo ] );
  100.         $row->class 'form-control-sm';           
  101.         $row=$this->form->addFields
  102.                                         [ new TLabel('Codigo ANP') ], [ $scodigoanp ] , 
  103.                                         [ new TLabel('SIAT') ], [ $siat ], [ new TLabel('IPPT') ], [ $sippt ] ,[new TLabel('Imagem')],  [$spath] );
  104.         $row->layout = [ 'col-sm-2 control-label''col-sm-1'
  105.                           'col-sm-2 control-label''col-sm-2',
  106.                           'col-sm-1 control-label''col-sm-1',
  107.                           'col-sm-1 control-label''col-sm-2' ];        
  108.                                         
  109.         $row->class 'form-control-sm';           
  110.         $row=$this->form->addFields( [ new TLabel('Localização Corredor') ], [ $slocalizacaocorredor ] ,
  111.                                      [ new TLabel('Hizontal') ], [ $slocalizacaoposicaohorizontal ] ,
  112.                                      [ new TLabel('Vertical') ], [ $slocalizacaoposicaovertical ] ,[]);
  113.          $row->layout = [ 'col-sm-2 control-label''col-sm-1'
  114.                           'col-sm-2 control-label''col-sm-2',
  115.                           'col-sm-1 control-label''col-sm-1',
  116.                           'col-sm-1 control-label''col-sm-2' ];                                     
  117.         $row->class 'form-control-sm';           
  118.         $row=$this->form->addFields( [ new TLabel('NCM','red') ], [ $ncm_id ] , [ new TLabel('Codigo GTIN') ], [ $scodigogtin ] , [ new TLabel('GTIN Trib') ], [ $scodigogtintrib ] ,[]);
  119.          $row->layout = [ 'col-sm-2 control-label''col-sm-2'
  120.                           'col-sm-2 control-label''col-sm-2',
  121.                           'col-sm-1 control-label''col-sm-1',
  122.                           'col-sm-1 control-label''col-sm-1' ];                                     
  123.         $row->class 'form-control-sm';           
  124.         $row=$this->form->addFields( [ new TLabel('Especificação') ], [ $sespecificacao ],[] );
  125.         $row->class 'form-control-sm';           
  126.         $row=$this->form->addFields( [  ], [ ],[] );
  127.         $row->class 'form-control-sm';           
  128.          
  129.         // set sizes
  130.         $id->setSize('100%');
  131.         $usuarioinclusao_id->setSize('100%');
  132.         $usuarioalteracao_id->setSize('100%');
  133.         $unidade_id->setSize('100%');
  134.         $sdescricao->setSize('100%');
  135.         $sdescricaonf->setSize('100%');
  136.         $sreferencia->setSize('100%');
  137.         $marca_id->setSize('100%');
  138.         $grupoproduto_id->setSize('100%');
  139.         $npesoliquido->setSize('100%');
  140.         $npesobruto->setSize('100%');
  141.         $nprecocusto->setSize('100%');
  142.         $nprecovenda->setSize('100%');
  143.         $nporcentagemlucrodesejado->setSize('100%');
  144.         $nlucrodesejado->setSize('100%');
  145.         $nprecosugerido->setSize('100%');
  146.         $fornecedor_id->setSize('100%');
  147.         $stipoproduto->setSize('100%');
  148.         $nprecopromocao->setSize('100%');
  149.         $sativapromocao->setSize('100%');
  150.         $nestoqueminimo->setSize('100%');
  151.         $nestoquemaximo->setSize('100%');
  152.         $nestoquesaldo->setSize('100%');
  153.         $sespecificacao->setSize('100%');
  154.         $scodigogtin->setSize('100%');
  155.         $scodigoanp->setSize('100%');
  156.         $sippt->setSize('100%');
  157.         $siat->setSize('100%');
  158.         $slocalizacaocorredor->setSize('100%');
  159.         $slocalizacaoposicaohorizontal->setSize('100%');
  160.         $slocalizacaoposicaovertical->setSize('100%');
  161.         $ncm_id->setSize('100%');
  162.         $scodigogtintrib->setSize('100%');
  163.         $dt_ultimacompra->setSize('100%');
  164.         
  165.         $sespecificacao->setSize(730,60);        
  166.         
  167.         $spath->setAllowedExtensions( ['gif''png''jpg''jpeg'] ); 
  168.         
  169.         $spath->enableFileHandling();
  170.         $spath->enableImageGallery();
  171.         $spath->enablePopover('Preview''<img style="max-width:250px" src="download.php?file={file_name}">');
  172.         $sippt->addItems( ['P' => 'PROPRIO''T' => 'TERCEIROS'] );
  173.         $sippt->setValue('P');
  174.         $siat->addItems( ['A' => 'ARREDONDAMENTO''T' => 'TRUNCAMENTO'] );
  175.         $siat->setValue('A');
  176.         $stipoproduto->addItems( ['PR' => 'PROPRIO REVENDA''TR' => 'TERCEIROS REVENDA''CO' => 'CONSUMO''MP' => 'MATÉRIA PRIMA' ] );
  177.         $stipoproduto->setValue('TR');
  178.         
  179.         $sativapromocao->addItems( ['N' => 'NÃO''S' => 'SIM' ] );
  180.         $sativapromocao->setValue('N');
  181.         $dt_ultimacompra->setMask('dd/mm/yyyy',true);
  182.         $dt_ultimacompra->setDatabaseMask('yyyy-mm-dd'); 
  183.         $dt_ultimacompra->setOption('showOnFocus'false); 
  184.         $dt_ultimacompra->setOption('triggerEvent''dblclick');    
  185.         
  186.         $npesoliquido->setNumericMask(4',''.'true);
  187.         $npesobruto->setNumericMask(4',''.'true);
  188.         $nprecocusto->setNumericMask(4',''.'true);
  189.         $nprecovenda->setNumericMask(4',''.'true);
  190.         $nporcentagemlucrodesejado->setNumericMask(4',''.'true);
  191.         $nlucrodesejado->setNumericMask(4',''.'true);
  192.         $nprecosugerido->setNumericMask(4',''.'true);
  193.         $nprecopromocao->setNumericMask(4',''.'true);
  194.         $nestoqueminimo->setNumericMask(4',''.'true);
  195.         $nestoquemaximo->setNumericMask(4',''.'true);
  196.         $nestoquesaldo->setNumericMask(4',''.'true);
  197.         $npesoliquido->setValue('0');
  198.         $npesobruto->setValue('0');
  199.         $nprecocusto->setValue('0');
  200.         $nprecovenda->setValue('0');
  201.         $nporcentagemlucrodesejado->setValue('0');
  202.         $nlucrodesejado->setValue('0');
  203.         $nprecosugerido->setValue('0');
  204.         $nprecopromocao->setValue('0');
  205.         $nestoqueminimo->setValue('0');
  206.         $nestoquemaximo->setValue('0');
  207.         $nestoquesaldo->setValue('0');
  208.         $unidade_id->setMinLength(0);
  209.         $marca_id->setMinLength(0);
  210.         $grupoproduto_id->setMinLength(0);
  211.         
  212.         $sdescricao->forceUpperCase();
  213.         $sdescricaonf->forceUpperCase();
  214.         $sreferencia->forceUpperCase();
  215.         $slocalizacaocorredor->forceUpperCase();
  216.         $slocalizacaoposicaohorizontal->forceUpperCase();
  217.         $slocalizacaoposicaovertical->forceUpperCase();       
  218.         
  219.         if (!empty($id))
  220.         {
  221.             $id->setEditable(FALSE);
  222.         }
  223.         
  224.         
  225.        
  226.         
  227.         
  228.         /** samples
  229.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  230.          $fieldX->setSize( '100%' ); // set size
  231.          **/
  232.         $this->form->addHeaderActionLink_t('Close'),  new TAction([__CLASS__'onClose'], ['static'=>'1']), 'fa:times red');
  233.          
  234.         // create the form actions
  235.         $btn $this->form->addAction(_t('Save'), new TAction([$this'onSave']), 'fa:save');
  236.         $btn->class 'btn btn-sm btn-primary';
  237.         $this->form->addActionLink(_t('New'),  new TAction([$this'onEdit']), 'fa:eraser red');
  238.         
  239.         // vertical box container
  240.         $container = new TVBox;
  241.         $container->style 'width: 100%';
  242.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  243.         $container->add($this->form);
  244.         
  245.         parent::add($container);
  246.     }
  247.     /**
  248.      * Save form data
  249.      * @param $param Request
  250.      */
  251.     public function onSave$param )
  252.     {
  253.         try
  254.         {
  255.             TTransaction::open('tutorerpdfe'); // open a transaction
  256.             
  257.             /**
  258.             // Enable Debug logger for SQL operations inside the transaction
  259.             TTransaction::setLogger(new TLoggerSTD); // standard output
  260.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  261.             **/
  262.             
  263.             $this->form->validate(); // validate form data
  264.             $data $this->form->getData(); // get form data as array
  265.             
  266.             $object = new Produto;  // create an empty object
  267.             $object->fromArray( (array) $data); // load the object with data
  268.             if (!empty($object->id)) {
  269.                $objectImagem = new ProdutoImagem;
  270.                $objectImagem->delete($object->id);
  271.                }            
  272.             
  273.             $this->saveFiles($object$data'spath''files/images''ProdutoImagem''spath''produto_id');
  274.           
  275.             if (empty($object->id)) {
  276.                $object->usuarioinclusao_id  TSession::getValue('userid');
  277.                $object->usuarioalteracao_id '0';
  278.             } else {
  279.                $object->usuarioalteracao_id TSession::getValue('userid');
  280.             }
  281.             if (empty($object->fornecedor_id)) {
  282.                $object->fornecedor_id '0';
  283.             } 
  284.             
  285.             
  286.             $object->store(); // save the object
  287.             
  288.             // get the generated id
  289.             $data->id $object->id;
  290.             
  291.             $this->form->setData($data); // fill form data
  292.             TTransaction::close(); // close the transaction
  293.             
  294.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'));
  295.         }
  296.         catch (Exception $e// in case of exception
  297.         {
  298.             new TMessage('error'$e->getMessage()); // shows the exception error message
  299.             $this->form->setData$this->form->getData() ); // keep form data
  300.             TTransaction::rollback(); // undo all pending operations
  301.         }
  302.     }
  303.     
  304.     /**
  305.      * Clear form data
  306.      * @param $param Request
  307.      */
  308.     public function onClear$param )
  309.     {
  310.         $this->form->clear(TRUE);
  311.     }
  312.     
  313.     /**
  314.      * Load object to form data
  315.      * @param $param Request
  316.      */
  317.     public function onEdit$param )
  318.     {
  319.         try
  320.         {
  321.             if (isset($param['key']))
  322.             {
  323.                 $key $param['key'];  // get the parameter $key
  324.                 TTransaction::open('tutorerpdfe'); // open a transaction
  325.                 $object = new Produto($key); // instantiates the Active Record
  326.                 $this->form->setData($object); // fill the form
  327.                 $data = new stdClass;
  328.                 $data->spath ProdutoImagem::where('produto_id''='$param['key'])->getIndexedArray('spath');    
  329.                 $this->form->setData($data);              
  330.                 TTransaction::close(); // close the transaction
  331.             }
  332.             else
  333.             {
  334.                 $this->form->clear(TRUE);
  335.             }
  336.         }
  337.         catch (Exception $e// in case of exception
  338.         {
  339.             new TMessage('error'$e->getMessage()); // shows the exception error message
  340.             TTransaction::rollback(); // undo all pending operations
  341.         }
  342.     }
  343.     
  344.  
  345.     public static function onClose()
  346.     {
  347.         parent::closeWindow();
  348.     }
  349.     
  350.     
  351. }

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

Teste o seguinte na função onEdit:
  1. <?php
  2. // onEdit
  3.  $data->spath ProdutoImagem::where('produto_id''='$param['key'])->getIndexedArray('id','spath');
  4. ?>
PG

Obrigado.
Deu certo.
valeu.