diff --git a/Fila-Servico/lib/Fila/Servico/Controller/WS/Gestao/Local.pm b/Fila-Servico/lib/Fila/Servico/Controller/WS/Gestao/Local.pm index 9153412..0344300 100644 --- a/Fila-Servico/lib/Fila/Servico/Controller/WS/Gestao/Local.pm +++ b/Fila-Servico/lib/Fila/Servico/Controller/WS/Gestao/Local.pm @@ -92,22 +92,34 @@ sub refresh_painel :Private { sub refresh_gerente :Private { my ($self, $c) = @_; + # esse método é chamado por outras ações que precisam fazer um # callback para o gerente do local. As informações todas são # enviadas, para que possa ser apresentada a tela. - my $old = $c->stash->{soap}->compile_return(); - - my $local = $self->status_local($c, {}); - my $guiches = $self->status_guiches($c, {}); - my $encaminhamentos = $self->listar_encaminhamentos($c, {}); - - $c->model('SOAP')->transport->connection($c->engine->connection($c)); - $c->model('SOAP')->transport->addrs([$c->stash->{local}->gerente_atual->first->funcionario->jid.'/cb/render/gerente']); - $c->model('SOAP::CB::Gerente')->render_gerente({ %$local, %$guiches, %$encaminhamentos }); - - $c->stash->{soap}->compile_return($old); - + my $storage = $c->model('DB')->storage; + $storage->ensure_connected; + + $storage->txn_do + (sub { + # Essa operação é somente leitura, dessa forma, vamos mandar o + # model alterar o tipo da transação, de forma a reduzir a + # contenção de locks + $storage->dbh_do('SET TRANSACTION READ ONLY'); + + my $local = $self->status_local($c, {}); + my $guiches = $self->status_guiches($c, {}); + my $encaminhamentos = $self->listar_encaminhamentos($c, {}); + + my $old = $c->stash->{soap}->compile_return(); + $c->model('SOAP')->transport->connection + ($c->engine->connection($c)); + $c->model('SOAP')->transport->addrs + ([$c->stash->{local}->gerente_atual->first->funcionario->jid.'/cb/render/gerente']); + $c->model('SOAP::CB::Gerente')->render_gerente + ({ %$local, %$guiches, %$encaminhamentos }); + $c->stash->{soap}->compile_return($old); + }); } -- libgit2 0.21.2