Você está na página 1de 15

TREINAMENTO MIOLO

Sumário
BANCO DE DADOS......................................................................................................2
MAPEAMENTO.............................................................................................................3
CLASSES DE NECGÓCIO...........................................................................................5
Atributos....................................................................................................................5
Métodos.....................................................................................................................6
CRIAÇÃO DOS HANDLERS.........................................................................................8
main.inc.....................................................................................................................8
pedidocompra.inc......................................................................................................8
pedidocompra/find.inc...............................................................................................9
pedidocompra/main.inc.............................................................................................9
pedidocompra/new.inc............................................................................................10
CRIAÇÃO DOS FORMULÁRIOS................................................................................11
Classe frmPedido()..................................................................................................11
Classe frmPedidoAnexar()......................................................................................11
Classe frmPedidoEdit()...........................................................................................11
Classe frmPedidoIndeferir()....................................................................................11
Classe frmPedidoNew()..........................................................................................11
Classe frmPedidosFind().........................................................................................11
CRIAÇÃO DE UM GRID..............................................................................................12
Classe gridPedidos()...............................................................................................12
Configuração do link....................................................................................................14
Esta classe exibe o link para uma determinada ação numa coluna do Grid. Para
isso é necessário definir todos os métodos abaixo................................................14
setObjectByValue: instancia o objeto que será utilizado durante a execução;......14
setAction: define o link que tal objeto irá receber;..................................................14
setText: configura o texto que será utilizado para identificar o link;.......................14
setNew: define o link padrão para criar um novo item...........................................14
global $MIOLO;.......................................................................................................14
CRIAÇÃO DE UM RELATÓRIO..................................................................................15
IReport.....................................................................................................................15

1
BANCO DE DADOS

AD_PEDIDOCOMPRA AD_MOTIVOSPEDIDOSCOMPRAS
idpedidocompra integer idmotivo integer
data date idpedidocompra integer
idusuario numeric motivo text
idsetor numeric
instituicao character varying
numpro character varying SEQUENCES
situacao character varying seq_ad_pedidocompra
idmaterial numeric seq_ad_motivospedidoscompras
quantidade numeric
idservico numeric
empresa1 character varying
empresa1_cnpj character
empresa1_cotacao numeric
empresa2 character varying
empresa2_cnpj character
empresa2_cotacao numeric
empresa3 character varying
empresa3_cnpj character
empresa3_cotacao numeric
fundamentacao text
justificativa text
objeto text

2
MAPEAMENTO

Os arquivos de mapeamento são arquivos no formato XML que permitem


a definição de como estão representadas as tabelas e seus atributos, os
relacionamentos existentes com outras classes.

TAG FUNÇÂO

<moduleName> nome do módulo onde a classe de negócios está definida


<className> nome da classe de negócios, dentro do módulo <moduleName>
<tableName> nome da tabela que mapeia a classe. Nesta versão uma classe
pode ser mapeada para apenas uma tabela.
<databaseName> nome da configuração do banco de dados no arquivo miolo.conf
<attributeName> nome do atributo conforme definido na classe
<columnName> nome da coluna que representa o atributo na tabela
<tableName>.
<key> indica, quando este atributo é uma chave da tabela, qual o tipo
de chave. Pode ser primary ou foreign.

<idgenerator> quando o atributo é chave, esta tag pode indicar qual o nome do
IdGenerator a ser passado para a camada DAO do Miolo, para a
geração automática de OID.

<toClassModule> nome do módulo da classe associada

<toClassName> nome da classe associada, dentro do módulo <toClassModule>

<cardinality> cardinalidade da associação. Os valores possíveis são: oneToOne,


oneToMany e manyToMany.

<target> indica qual o atributo vai receber o objeto que for recuperado
através da associação. É também o nome usado para identificar a
associação. Por exemplo, a associação com <target> igual a
‘person’, na classe User, indica que um objeto da classe Person,
associado com este objeto User, vai ser recuperado e armazenado
no atributo ‘person’.

<retrieveAutomatic> indica se as operações de recuperação, armazenamento e


<saveAutomatic> remoção (respectivamente) serão realizadas automaticamente na
<deleteAutomatic> classe associada. Estas tags são opcionais e o valor default é
false. Cuidado especial deve ser tomado nesta definição pois a
recuperação (ou armazenamento ou remoção) de um simples
objeto pode ocasionar a recuperação automática de dezenas de
outros, dependendo do valor destas tags. De certa forma é usada
para mapear (e sobrepor) as definições de integridade referencial
declaradas no esquema relacional.

3
<entry> Nas associações oneToOne e oneToMany descreve a associação
entre os atributos da classe mapeada e os atributos da classe
associada. Dentro da tag <entry>, <fromAttribute> indica o
atributo da classe mapeada e <toAttribute> indica o atributo da
classe associada. Podem existem várias tags <entry> (por
exemplo, no caso de chaves compostas).

<converterName> nome da classe de conversão. Deve implementar a interface


IConverter.

<parameter> Define os parâmetros que poderão ser usados como valores de


propriedades na classe de conversão. Uma classe pode ter vários
parâmetros associados. No caso do exemplo, o parâmetro ‘case’
define se a conversão será para maiúsculas (‘upper’) ou
minúsculas (‘lower’).Opcional.

<parameterName> Define o nome e o valor do parâmetro a ser passado para a


<parameterValue> classe de conversão.

4
CLASSES DE NECGÓCIO

Todas as classes de negócio herdam da classe Business ou


MBusiness É nestas classes que os dados são tratados antes de serem enviados
ao usuário ou para o banco, por ela é feito todo o acesso ao banco de dados,
utilizando algumas classes como: MDatabase, MSQL, Mquery.

Arquivo: modules/adm/classes/pedidocompra.class

class BusinessAdmPedidoCompra extends Business {

Arquivo: modules/adm/classes/motivospedidoscompras.class

class BusinessAdmMotivosPedidosCompras extends Mbusiness {

Atributos

Os atributos da classe deve refletir os que foram definidos no arquivo de


mapeamento da tabela.

Arquivo: modules/adm/classes/pedidocompra.class

public $idPedidoCompra;
public $idUsuario;
public $idSetor;
public $idMaterial;
public $idServico;
public $instituicao;
public $data;
public $numPro;
public $situacao;
public $quantidade;
public $empresa1;
public $empresa1Cnpj;
public $empresa1Cotacao;
public $empresa2;
public $empresa2Cnpj;
public $empresa2Cotacao;
public $empresa3;
public $empresa3Cnpj;
public $empresa3Cotacao;

5
public $fundamentacao;
public $justificativa;
public $objeto;

Arquivo: modules/adm/classes/motivospedidoscompras.class

public $idMotivo;
public $idpedidocompra;
public $motivo;

Métodos

Arquivo: modules/adm/classes/pedidocompra.class

public function __construct($database = NULL, $data = NULL) {


parent::__construct('sigaept', $data);
}
// este método acessa o banco e retorna um objeto do business
// de acordo com o id passado como parâmetro
public function GetById($idPedidoCompra) {
$this->idPedidoCompra = $idPedidoCompra;
$this->retrieve();
return $this;
}
public function OnCreate($data) {
if (!empty($data)) {
$this->GetById($data);
}
}
//realiza a query que irá preencher o grid com os dados vindos do
//formulário de pesquisa
public function listPedidos($situacao=null,$instituicao=null,
$processo=null,$data=null,$cadmat=null,$codservico=null,$natureza=null) {
$sql = new sql(
"p.idpedidocompra as pedido, p.situacao,
TO_CHAR(p.data,'DD/MM/YYYY') as data,
i.instituicao as instituicao, s.siglasetor as setor,
u.nick as usuario", "ad_pedidocompra p, cm_setor s,
cm_usuario u, cm_instituicao i",
"p.idsetor=s.idsetor AND p.idusuario=u.idusuario AND
p.idsetor=s.idsetor AND p.instituicao=i.uasg AND i.status='A'"
);
if (!empty($situacao) && !is_null($situacao)) {
$sql->SetWhere("p.situacao = UPPER('$situacao')");
}
if (!empty($instituicao) && !is_null($instituicao)) {
$sql->SetWhere("p.instituicao = '$instituicao'");
}
if (!empty($processo) && !is_null($processo)) {
$sql->SetWhere("p.numpro = '$processo'");
}
if (!empty($data) && !is_null($data)) {
$sql->SetWhere("TO_CHAR(p.data,'DD/MM/YYYY') <=

6
TO_CHAR(CAST('$data' as date),'DD/MM/YYYY')");
}
if (!empty($cadmat) && !is_null($cadmat)) {
$sql->SetWhere("p.idmaterial = '$cadmat'");
}
if (!empty($codservico) && !is_null($codservico)) {
$sql->SetWhere("p.idservico = '$codservico'");
}
$sql->SetOrderBy("p.idpedidocompra desc");
return = $this->Query($sql);
}

Arquivo: modules/adm/classes/pedidocompra.class

public function __construct($data = NULL) {


parent::__construct('sigaept', $data);
}
public function OnCreate($data) {
if (!empty($data)) {
$this->GetById($data);
}
}
public function GetById($id) {
$this->idMotivo = $id;
$this->retrieve();
return $this;
}
// retorna o motivo de acordo com o id do pedido passado
public function getMotivo($idPedido = null) {
if ($idPedido != null) {
$criteria = $this->getCriteria();
$criteria->AddColumnAttribute('motivo');
$criteria->addCriteria('idpedidocompra', '=', "$idPedido");
$criteria->addOrderAttribute('idpedidocompra', false);
$query = $criteria->retrieveAsQuery();
return $query->result[0][0];
}
}

7
CRIAÇÃO DOS HANDLERS

Sua função é tratar a solicitação feita pelo usuário através do browser. O


handler atua, assim, no papel de controller, fazendo a integração entre as regras de
negócio e a interface com o usuário.

main.inc

Arquivo: modules/adm/handlers/main.inc

// Este era o link anterior que apontava para módulo anterior


$panel->AddAction(
'Orçamento Termo',
$ui->GetImageTheme('','icons/financeiro.png'),
$module,
'main:orcterm'
);

// Depois de modificado o link ficou assim


$panel->AddAction(
'Orçamento Termo',
$ui->GetImageTheme('','icons/financeiro.png'),
$module,
'main:pedidocompra:find'
);

pedidocompra.inc

$ui = $MIOLO->GetUI();
// Adiciona o link do do módulo aos breadcumbs.
$navbar->AddOption('Solicitação de Compra','adm','main:pedidocompra');
$close = $MIOLO->GetActionURL($module,'main');
// Painel
$panel = new ActionPanel('pnlAdTables','Solicitação de Compra','',$close);
$panel->SetIconType('large');
// Ícones do painel
$panel->AddUserAction(
'adm_pedidocompra',
A_EXECUTE,
'Solicitação de Compra',
$ui->GetImageTheme('','icons/itens_patrimoniais.png'),
$module,
'main:pedidocompra:new'
);
$panel->AddUserAction(
'adm_pedidocompra',
A_EXECUTE,
'Pesquisa de Solicitações',

8
$ui->GetImageTheme('','icons/itens_patrimoniais.png'),
$module,
'main:pedidocompra:find'
);
$theme->AppendContent($panel);

// identifica qual a action que foi requisitada e transfere a


// responsabilidade para o handler específico
switch($action) {
case 'main:pedidocompra:new':
$MIOLO->InvokeHandler($module, 'pedidocompra/new');
break;
case 'main:pedidocompra:find':
$MIOLO->InvokeHandler($module, 'pedidocompra/find');
break;
default :
$MIOLO->InvokeHandler($module, 'pedidocompra/main');
}

pedidocompra/find.inc

$theme->ClearContent();
$ui = $MIOLO->GetUI();
$navbar->AddOption('Pesquisar Solicitações', 'adm',
'main:pedidocompra:find');
$form = $ui->GetForm('adm','frmPedidosFind',NULL,'pedidocompra');
$theme->InsertContent($form);

pedidocompra/main.inc

// Checa se o usuário pertence ao grupo de permissões ADM


$perms->CheckAccess('ADM',A_ACCESS, true);
// limpa o conteúdo da tela
$theme->ClearContent();
$ui = $MIOLO->GetUI();

// cria um objeto de business do pedido que foi passado como parâmetro;


// o id do pedido pode ser verificado na variável item
$objPedido = $MIOLO->GetBusiness('adm', 'pedidocompra', $item);

// se o item for passado na url o formulário a ser chamado é o da


// alteração do pedido, se não é mostrada a tela de pesquisa
if(isset($item)) {
$navbar->AddOption(
'Solicitação de Compra - Número ' . $objPedido->idPedidoCompra,
'adm',
'main:pedidocompra:find',
$item
);
// aqui é requisitado o formulário e o objeto do pedido de compra

9
// é enviado como parâmetro
$form = $MIOLO->GetUI()->GetForm(
$module ,
'frmPedido',
$objPedido,
'pedidocompra'
);
} else {
$form = $ui->GetForm('adm','frmPedidosFind',NULL,'pedidocompra');
}
$theme->InsertContent($form);

$a = $context ? $context->ShiftAction() : 'main';


$handled = $MIOLO->InvokeHandler($module,$a);

pedidocompra/new.inc

$theme->ClearContent();
$ui = $MIOLO->GetUI();
$objPedido = $MIOLO->GetBusiness('adm', 'pedidocompra', $item);
$navbar->AddOption('Nova Solicitação', 'adm', 'main:pedidocompra:new');
$form = $ui->GetForm('adm','frmPedidoNew',$objPedido,'pedidocompra');
$theme->InsertContent($form);

10
CRIAÇÃO DOS FORMULÁRIOS

Os formulários normalmente estendem da classe Mform. Todo classe


de formulário deve possuir um método createFields(), onde devem ser criados
os campos e botões do formulário. E no método __construct() deve ser
chamado o construtor da classe pai.
Os formulários do Miolo são baseados em eventos que são definidos
durante a criação dos botões, para que estes eventos sejam executados
corretamente é necessário chamar o método $this->eventHandler() ao final do
construtor.

Classe frmPedido()

Arquivo anexo: modules/adm/forms/pedidocompra/frmPedido.class

Classe frmPedidoAnexar()

Arquivo anexo: modules/adm/forms/pedidocompra/frmPedidoAnexar.class

Classe frmPedidoEdit()

Arquivo anexo: modules/adm/forms/pedidocompra/frmPedidoEdit.class

Classe frmPedidoIndeferir()

Arquivo anexo: modules/adm/forms/pedidocompra/frmPedidoIndeferir.class

Classe frmPedidoNew()

Arquivo anexo: modules/adm/forms/pedidocompra/frmPedidoNew.class

Classe frmPedidosFind()

Arquivo anexo: modules/adm/forms/pedidocompra/frmPedidoFind.class

11
CRIAÇÃO DE UM GRID

A classe MDataGrid2 permite criar listagens, com paginação e ordenação


de dados retornados a partir de uma query. É necessário apenas um método, o
__construct que irá definir as colunas e a query a ser executada.

Classe gridPedidos()

global $MIOLO;
// Importação da classe de links
$MIOLO->Uses('controls/linkpedidocompra.class','adm');

class gridPedidos extends MDataGrid2 {


public $pedido;
public $perms;

public function __construct() {


global $MIOLO, $module, $page, $context, $self, $action, $perms, $state;

$this->pedido = $MIOLO->GetBusiness($module, 'pedidocompra');

// Método que retorna os pedidos de compra de acordo com os dados


// passdos no formulário de busca
$query = $this->pedido->listPedidos(
MForm::GetFormValue('situacao'),
MForm::GetFormValue('instituicao'),
MForm::GetFormValue('numpro'),
MForm::GetFormValue('data'),
MForm::GetFormValue('codMaterial'),
MForm::GetFormValue('codServico'),
array(
MForm::GetFormValue('elemento'),
MForm::GetFormValue('subelemento')
)
);

$this->SetIndex(1);

$linkPedido = new LinkPedido('linkpedido','%0%');

$columns = array(
// Insere o link para o pedido de compra
new DataGridControl($linkPedido, 'pedido','Pedido','',false,'5%'),
new MDataGridColumn('instituicao','Instituição','',false,'30%'),
new MDataGridColumn('usuario','Solicitante','',false,'35%'),
new MDataGridColumn('setor','Setor','',false,'10%'),
new MDataGridColumn('data','Data','',false,'10%'),
new MDataGridColumn('situacao','Situação','',false,'10%'),
);

12
// Configuração do link gerado pela paginação no grid
$href_grid = $MIOLO->GetActionURL(
$module,
$self,
'',
array('event'=>'btnFind')
);
parent::__construct($query, $columns, $href_grid, 25);
}
}

13
Configuração do link

Esta classe exibe o link para uma determinada ação numa coluna do Grid.
Para isso é necessário definir todos os métodos abaixo.

◦ setObjectByValue: instancia o objeto que será utilizado durante a


execução;
◦ setAction: define o link que tal objeto irá receber;
◦ setText: configura o texto que será utilizado para identificar o link;
◦ setNew: define o link padrão para criar um novo item.
global $MIOLO;
$MIOLO->Uses('controls/linkobject.class','adm');
class LinkPedido extends LinkObject {
public $object;
public function __construct($name = '', $object = null) {
global $MIOLO;
parent::__construct($name, $object, 'nothing.jpg');
}

public function setObjectByValue($value) {


$this->object = $this->manager->GetBusiness('adm','pedidocompra');
$this->object->GetById((int)$value);
}

public function setAction() {


$this->hyperlink->SetAction(
'adm',
'main:pedidocompra',
$this->object->idPedidoCompra);
$this->imagelink->SetAction(
'adm',
'main:pedidocompra',
$this->object->idPedidoCompra);
}

public function setText() {


$this->hyperlink->SetText($this->object->idPedidoCompra);
}

public function setNew() {


$this->isNewLink = true;
$this->hyperlink->SetAction('adm','main:pedidocompra:new');
$this->hyperlink->SetText('Realizar nova solicitação');
$this->imagelink->SetAction('adm','main:pedidocompra:new');
}
}

14
CRIAÇÃO DE UM RELATÓRIO

IReport

15

Você também pode gostar