Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
Informações Gerais
Especificação | |||
Produto | Datasul | Módulo | Gestão de Planos de Saúde |
Segmento Executor | Saúde | ||
Projeto | D_SAU_GPS_Roadmap20152016 | IRM | DGPS01-1 |
Requisito | Subtarefa | ||
País | (x) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. |
Objetivo
Criação de um novo perfil de usuário para permitir a alteração de propostas e beneficiários incluídos pelo mesmo usuário.
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:
Bloco de código | ||
---|---|---|
| ||
// 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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de 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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
<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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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] | - |
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|