Definição da Regra de Negócio
1) Criar um novo perfil de usuário que,
quanto à inclusão:
possa incluir propostas, mas não possa enviá-las para aprovação;
possa incluir beneficiários, desde que sejam em propostas incluídas por ele mesmo, mas não possa enviá-los para aprovação;
quanto à alteração:
possa modificar propostas, desde que estas tenham sido incluídas por ele mesmo.
possa modificar beneficiários, desde que estes sejam de propostas incluídas por ele mesmo.
Para isso, alterar os programas:
No programa src/main/flex/com/datasul/ems/healthcare/global/enumeration/RoleEnumeration.as adicionar uma nova constante que represente o novo perfil:
// Constante que representa o papel Auxiliar de Cadastro.
public static const REGISTER_AUXILIAR : String = "RAU";
No programa src/main/flex/com/datasul/ems/healthcare/hvp/HVPAccessibilityRoles.as também adicionar constantes para o novo perfil criado:
public static const BENEFICIARY_ROLES:Array = [
{data:RoleEnumeration.FILE_AUDITOR},
{data:RoleEnumeration.CONTRACTING_PARTY},
{data:RoleEnumeration.CONTRACT_ANALYST},
{data:RoleEnumeration.SALES_ASSISTANT},
{data:RoleEnumeration.REGISTER_ASSISTANT},
{data:RoleEnumeration.REGISTER_AUXILIAR}];
public static const CONTRACTING_PARTY_ROLES:Array = [
{data:RoleEnumeration.SALES_ASSISTANT},
{data:RoleEnumeration.REGISTER_ASSISTANT},
{data:RoleEnumeration.REGISTER_AUXILIAR}];
Em todos os programas que utilizarem a constante SALES_ASSISTANT, será necessário incluir uma igual validação para a nova constante criada. Estes programas são:
src/main/flex/com/datasul/ems/healthcare/hvp/createcontract/ui/ContractFilter.mxml
src/main/flex/com/datasul/ems/healthcare/hvp/contract/controller/ContractFilterController.as
src/main/flex/com/datasul/ems/healthcare/hvp/createcontract/zoom/ProposalZoomFilter.mxml
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/maintenance/controller/BeneficiaryInformationsController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/maintenance/controller/BeneficiaryMaintenanceController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/maintenance/controller/RepassDestinyController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryCRUDModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryHeadFilterModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryWizardModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/company2/handler/HandleCheckModifyPermission.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/demographic2/handler/HandleCheckModifyPermission.as
No programa src/main/flex/com/datasul/ems/healthcare/hvp/contract/controller/ContractCRUDController.as, no método chamado ao clicar no botão enviar para liberação (auditButtonHandler()), testar se o usuário pertence ao novo perfil e não permitir enviar para liberação:
public function auditButtonHandler() : void {
var message:UIMessage;
if (!checkSelectedProposal()){
message = new UIMessage("Atenção!",
"Nenhuma proposta selecionada para enviar para a liberação.",
UIMessage.WARNING);
} else {
if (RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR)) {
message = new UIMessage("Atenção",
"Usuário não possui permissão para enviar esta proposta para liberação",
UIMessage.INFO);
}
else message = new UIMessage("Enviar para liberação",
"Você deseja mesmo enviar as propostas selecionadas para liberação?",
UIMessage.CONFIRM, "", "", sendProposalToLiberation);
}
MessageUtil.showMessage(message);
}
No método chamado ao clicar no botão alterar (modifyButtonHandler()), testar se o usuário pertence ao novo perfil e não permitir realizar a alteração do contrato:
if (RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR) && (this._model.selectedProposal.userName != UserManager.getInstance().user.loginName)) {
MessageUtil.showMessage(new UIMessage("Atenção","Usuário não possui permissão para alterar esta proposta",UIMessage.INFO));
return;
}
No programa src\main\flex\com\datasul\ems\healthcare\hvp\contract\controller\ContractWizardController.as, método responsável por setar os dados na tela de sumário da proposta criada (setupProposalCreatedSummary()), alterar para que o botão de enviar para auditoria fique visível apenas para usuários que não possuam o novo papel:
private function setupProposalCreatedSummary() : void {
this._model.proposalCreatedSummary.model.proposal = this._model.proposalDTO;
if(this._model.proposalCreatedSummary.hasEventListener(FlexEvent.CREATION_COMPLETE)){
this._model.proposalCreatedSummary.addEventListener(FlexEvent.CREATION_COMPLETE,initializeProposalCreatedSummary);
}
}
Desta forma, criar o método:
public function initializeProposalCreatedSummary(event:FlexEvent=null) : void{
this._model.proposalCreatedSummary.chkSendToAuditory.selected = false;
this._model.proposalCreatedSummary.chkSendToAuditory.visible = RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR);
this._model.proposalCreatedSummary.chkSendToAuditory.includeInLayout = RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR);
}
No programa src/main/flex/com/datasul/ems/healthcare/hvp/contract/controller/updatemenu/ContractUpdateMenuController.as, método responsável por verificar se o botão de liberação da proposta deve estar habilitado (verifyEnabledLiberateProposal()), testar se o usuário logado pertence ao novo perfil, adicionando o código:
if (!RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR)){
return false;
}
No programa src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryController.as, no método responsável por verificar a permissão de acesso à modificação de um determinado beneficiário (verifyRolePermissionForUpdate(crud : BenefsCRUDDTO )), verificar se o usuário logado pertence ao novo perfil. Em caso afirmativo, não permitir a alteração de beneficiários cuja inclusão tenha sido realizada por um usuário diferente do logado:
private function verifyRolePermissionForUpdate(crud : BenefsCRUDDTO ) : Boolean {
if (crud.isSimulationBeneficiary) {
return true;
}
if(this._model.isRegisterAuxiliar && (this._model.proposal.typingUser != UserManager.getInstance().user.loginName)) {
this.message = new UIMessage("Atenção", "Usuário não possui permissão " +
"para alterar beneficiários", UIMessage.INFO);
MessageUtil.showMessage(this.message);
return false;
}
No programa src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryCRUDController.as, no método responsável pela liberação do beneficiário (releaseBeneficiaryFromPendingPortlet()), verificar se o usuário logado pertence ao novo perfil. Em caso afirmativo, não permitir a liberação de beneficiários cuja inclusão tenha sido realizada por um usuário diferente do logado:
private function releaseBeneficiaryFromPendingPortlet() : void {
var message : UIMessage;
// Caso não exista algum beneficiário selecionado, exibe erro e aborta o processo.
var beneficiary:BenefsCRUDDTO = this._view.dg.selectedItem as BenefsCRUDDTO;
if (beneficiary == null) {
message = new UIMessage("Atenção", "Selecione ao menos um beneficiário para ser liberado", UIMessage.INFO);
MessageUtil.showMessage(message);
return;
}
if(this._model.isRegisterAuxiliar && (this._model.proposal.typingUser != UserManager.getInstance().user.loginName)) {
message = new UIMessage("Atenção", "Usuário não possui permissão " +
"para liberar beneficiários", UIMessage.INFO);
MessageUtil.showMessage(message);
return;
}
Nos programas abaixo, adicionar as validações do novo perfil. Sempre que houver uma validação para o perfil de SalesAssistant(SAS) o mesmo deve ser feito para o novo perfil, como por exemplo:
Alterar:
if(!this._model.isSalesAssistant && !this._model.isSalesAuxiliar && !this._model.isRegisterAssistant && !this._model.isContractingParty)
Para:
if(!this._model.isSalesAssistant && (!this._model.isSalesAuxiliar || !this._model.isRegisterAuxiliar) && !this._model.isRegisterAssistant && !this._model.isContractingParty)
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryCRUDController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryHeaderFilterController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryWizardController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryCRUDController.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/company2/handler/HandleCheckModifyPermission.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/demographic2/handler/HandleCheckModifyPermission.as
2) Na tela da Auditoria de Contratos, incluir o filtro abaixo:
Somente contratos pendentes de aprovação: Ao selecionar este filtro serão exibidos os contratos que ainda não sofreram/iniciaram auditoria por algum auditor.
Somente meus contratos: Ao selecionar esta opção, serão exibidos apenas os contratos cujo auditor responsável seja o usuário logado.
Todos: Ao selecionar esta opção, serão exibidos todos os contratos, ou seja, sem filtro.
Alterar os programas:
No programa src/main/flex/com/datasul/ems/healthcare/hvp/auditcontract/ui/AuditContractView.mxml, adicionar a tela os novos filtros:
<mx:ApplicationControlBar height="30" top="10" left="10" right="10">
<mx:Label text="Propostas Pendentes de Auditoria ({this.model.proposalsInAuditoryLenght})"
fontWeight="bold" fontSize="12"/>
<mx:HBox paddingLeft="40" width="100%" horizontalGap="20">
<mx:RadioButtonGroup id="radioGroupFilter" change="this.controller.onChangeRadioGroupFilter(event)"/>
<mx:RadioButton id="rbAll" value="1" label="Todos" groupName="radioGroupFilter" selected="true"/>
<mx:RadioButton id="rbPendingApproval" value="2" label="Somente contratos pendentes de aprovação" groupName="radioGroupFilter"/>
<mx:RadioButton id="rbMyContracts" value="3" label="Somente meus contratos" groupName="radioGroupFilter"/>
</mx:HBox>
<mx:Spacer width="100%"/>
<mx:LinkButton icon="@Embed('/assets/icons/hot/refresh_16_hot.png')"
click="this.controller.getProposalsPendingOfAuditory()"
toolTip="Recarregar listagem"/>
</mx:ApplicationControlBar>
Com esta alteração é necessário adicionar ao programa src/main/flex/com/datasul/ems/healthcare/hvp/auditcontract/model/AuditContractModel.as a variável proposalsInAuditoryLenght:
Bindable
public var proposalsInAuditoryLenght : String = "000";
E no programa src/main/flex/com/datasul/ems/healthcare/hvp/auditcontract/ui/AuditContractController.as adicionar as tratativas do filtro:
Função auditContractResultHandler:
private function auditContractResultHandler(event : AuditContractResultEvent) : void {
if(event.type == AuditContractResultEvent.GET_PROPOSALS_PENDING_AUDITORY) {
this._model.proposalsInAuditoryList = event.resultCollection;
this._model.proposalsInAuditoryList.filterFunction = this.filterProposalsInAuditory;
this._model.proposalsInAuditoryList.refresh();
this.formatProposalsInAuditoryList();
Adicionar as novas funções:
private function formatProposalsInAuditoryList() : void {
if(this._model.proposalsInAuditoryList.length < 10){
this._model.proposalsInAuditoryLenght = '00' + String(this._model.proposalsInAuditoryList.length);
return;
}
if(this._model.proposalsInAuditoryList.length >= 10 && this._model.proposalsInAuditoryList.length < 100){
this._model.proposalsInAuditoryLenght = '0' + String(this._model.proposalsInAuditoryList.length);
return;
}
this._model.proposalsInAuditoryLenght = String(this._model.proposalsInAuditoryList.length);
}
public function onChangeRadioGroupFilter(e:Event = null) : void {
this._model.proposalsInAuditoryList.refresh();
this.formatProposalsInAuditoryList();
}
private function filterProposalsInAuditory(item:Object) : Boolean {
if(item == null) {
return false;
}
var proposalDTO:ProposalDTO = item as ProposalDTO;
var filterValue : int = this._view.radioGroupFilter.selectedValue as int;
switch (filterValue) {
case 1: //Todos
return true;
case 2: //Pendente de Aprovacao
if(proposalDTO.situationCode == ProposalStatusEnumeration.PENDING_APPROVAL){
return true;
}
return false;
case 3: //Somente meus contratos
if(UserManager.getInstance().user.loginName == proposalDTO.approverName){
return true;
}
return false;
}
return false;
}
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
[contractView - Manutenção Contratos] | [Alteração] | [VP - Venda de Planos -> Cadastros] | - |
[beneficiaryView - Manutenção Beneficiário] | [Alteração] | [VP - Venda de Planos -> Cadastros] | - |