/// <summary> /// Altera o status dos atendimentos para "concluído" e efetiva as ações. /// </summary> /// <param name="atendimentoIDs">Lista de ids de atendimentos a serem processados.</param> public void EfetivaAtendimento(List <String> atendimentoItemIDs) { PersistenceManager pm = new PersistenceManager(); pm.BeginTransactionContext(); Atendimento atendimento; try { IList <AtendimentoItem> itensAtendimento = AtendimentoItem.CarregaAtendimentoItens(atendimentoItemIDs, pm); if (itensAtendimento != null) { Object contratoId = null; String[] arrAux = null, arrAux2 = null; ContratoBeneficiario cb = null; foreach (AtendimentoItem item in itensAtendimento) { item.Status = (Int32)Atendimento.eStatus.Concluido; //true; pm.Save(item); atendimento = new Atendimento(item.AtendimentoId); pm.Load(atendimento); if (eTipoAtendimentoItem.SegundaViaCartao == ((eTipoAtendimentoItem)item.Tipo)) { #region Marca o beneficiário para segunda via de cartao arrAux = item.BeneficiarioIds.Split(','); contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); for (int i = 0; i < arrAux.Length; i++) { //TODO: criar uma sobrecarga que recebe um array de beneficiarioIDs e faz a alteração de forma atomica ContratoBeneficiario.AlteraStatusBeneficiario(contratoId, arrAux[i], ContratoBeneficiario.eStatus.SegundaViaCartaoPendente, pm); } #endregion } if (eTipoAtendimentoItem.CancelamentoContrato == ((eTipoAtendimentoItem)item.Tipo)) { #region Marca o contrato para cancelamento contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); ContratoBeneficiario titular = ContratoBeneficiario.CarregarTitular(contratoId, pm); titular.Status = (Int32)ContratoBeneficiario.eStatus.CancelamentoPendente; pm.Save(titular); #endregion #region Cancela o contrato e adiciona histórico contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); Contrato.AlteraStatusDeContrato(contratoId, true, pm); #endregion } else if (eTipoAtendimentoItem.AdicionarBeneficiarios == ((eTipoAtendimentoItem)item.Tipo)) { #region Adiciona o beneficiario como ContratoBeneficiario NOVO, calcula o novo valor do contrato, a vigencia dele, e atualiza as cobrancas arrAux = item.BeneficiarioIds.Split(','); arrAux2 = item.ParentescoIds.Split(','); DateTime dataAdmissao = atendimento.DataHora; contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); for (int i = 0; i < arrAux.Length; i++) { cb = new ContratoBeneficiario(); cb.Ativo = true; cb.BeneficiarioID = arrAux[i];// bId; cb.ContratoID = contratoId; cb.Data = dataAdmissao; cb.ParentescoID = arrAux2[i]; //obter info da classe atendimento cb.Tipo = (Int32)ContratoBeneficiario.TipoRelacao.Dependente; cb.Status = (Int32)ContratoBeneficiario.eStatus.Novo; cb.NumeroSequencial = ContratoBeneficiario.ProximoNumeroSequencial(contratoId, arrAux[i], pm); pm.Save(cb); } ContratoStatusHistorico.Salvar(atendimento.NumeroContrato, atendimento.OperadoraID, ContratoStatusHistorico.eStatus.BeneficiarioAdicionado, pm); #endregion } else if (eTipoAtendimentoItem.AlteracaoCadastro == ((eTipoAtendimentoItem)item.Tipo)) { #region Marca o ContratoBeneficiario como pendente para ENVIAR para a operadora contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); arrAux = item.BeneficiarioIds.Split(','); foreach (String benefID in arrAux) { cb = ContratoBeneficiario.CarregarPorContratoEBeneficiario(contratoId, benefID, pm); cb.Status = (Int32)ContratoBeneficiario.eStatus.AlteracaoCadastroPendente; pm.Save(cb); } ContratoStatusHistorico.Salvar(atendimento.NumeroContrato, atendimento.OperadoraID, ContratoStatusHistorico.eStatus.BeneficiarioAlterado, pm); #endregion } else if (eTipoAtendimentoItem.CancelarBeneficiarios == ((eTipoAtendimentoItem)item.Tipo)) { #region Marca os beneficiarios para cancelamento contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); arrAux = item.BeneficiarioIds.Split(','); DateTime dataCancelamento = atendimento.DataHora; foreach (String benefID in arrAux) { cb = ContratoBeneficiario.CarregarPorContratoEBeneficiario(contratoId, benefID, pm); cb.Status = (Int32)ContratoBeneficiario.eStatus.ExclusaoPendente; cb.Ativo = false; cb.DataInativacao = dataCancelamento; pm.Save(cb); } ContratoStatusHistorico.Salvar(atendimento.NumeroContrato, atendimento.OperadoraID, ContratoStatusHistorico.eStatus.BeneficiarioCancelado, pm); #endregion } else if (eTipoAtendimentoItem.MudancaDePlano == ((eTipoAtendimentoItem)item.Tipo)) { #region Marca o titular para mudança de plano do contrato contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); cb = ContratoBeneficiario.CarregarTitular(contratoId, pm); cb.Status = (Int32)ContratoBeneficiario.eStatus.MudancaPlanoPendente; pm.Save(cb); ContratoStatusHistorico.Salvar(atendimento.NumeroContrato, atendimento.OperadoraID, ContratoStatusHistorico.eStatus.MudancaDePlano, pm); #endregion #region Altera o plano, calcula novo valor, a vigencia dele, modifica as cobranças //contratoId = Contrato.CarregaContratoID(atendimento.OperadoraID, atendimento.NumeroContrato, pm); Contrato contrato = new Contrato(contratoId); pm.Load(contrato); contrato.PlanoID = item.PlanoId; contrato.TipoAcomodacao = item.AcomodacaoId; pm.Save(contrato); DateTime dataAlteracao = atendimento.DataHora; //Historico de alteracao de planos ContratoPlano cp = new ContratoPlano(); cp.ContratoID = contratoId; cp.PlanoID = item.PlanoId; cp.TipoAcomodacao = item.AcomodacaoId; cp.Data = atendimento.DataHora; pm.Save(cp); //contratoADMid = contrato.ContratoADMID; //CalendarioAdmissaoVigencia.CalculaDatasDeVigenciaEVencimento(contratoADMid, // dataAlteracao, out vigencia, out vencimento, out diaSemJuros, out valorDataLimite, pm); //cobrancas = Cobranca.CarregarTodas(contratoId, pm); //if (cobrancas != null && cobrancas.Count > 0) //{ // foreach (Cobranca cobranca in cobrancas) // { // if (((Cobranca.eTipo)cobranca.Tipo) == Cobranca.eTipo.Dupla || // ((Cobranca.eTipo)cobranca.Tipo) == Cobranca.eTipo.Complementar) // { continue; } // if (cobranca.DataVencimento >= vigencia) // { // cobranca.Valor = Contrato.CalculaValorDaProposta(contratoId, cobranca.DataVencimento, pm); // pm.Save(cobranca); // } // } //} #endregion } } } pm.Commit(); } catch (Exception ex) { pm.Rollback(); throw ex; } finally { pm = null; } }
public void Salvar(Contrato contrato, ContratoBeneficiario titular, IList <ContratoBeneficiario> dependentes, Object[] fichas, Object usuarioLiberadorID, IList <AdicionalBeneficiario> adicionalBeneficiario, Conferencia conferencia, Decimal valorTotal, bool gerarCobranca = true) { Decimal valorTotalContrato = 0; PersistenceManager pm = new PersistenceManager(); pm.BeginTransactionContext(); //TODO: checar se o contrato foi retirado do estoque (almox_contrato_impresso -> almox_contratoimp_produtorId <> null) // se nao, seta para o produtor da proposta try { Boolean novoContrato = contrato.ID == null; if (novoContrato) { //calcula o codigo de cobranca para o contrato. String qry = "SELECT MAX(contrato_codcobranca) FROM contrato"; object ret = LocatorHelper.Instance.ExecuteScalar(qry, null, null, pm); if (ret == null || ret == DBNull.Value) { ret = 0; } contrato.CodCobranca = Convert.ToInt32(ret) + 1; } //Salva o contrato. pm.Save(contrato); #region gera primeria cobranca if (novoContrato && gerarCobranca) { //gera a primeira cobranca ja paga Cobranca cobranca = new Cobranca(); cobranca.Cancelada = false; cobranca.ComissaoPaga = true; cobranca.ContratoCodCobranca = Convert.ToString(contrato.CodCobranca); cobranca.DataCriacao = DateTime.Now; cobranca.DataPgto = contrato.Admissao; cobranca.DataVencimento = contrato.Admissao; cobranca.Pago = true; cobranca.Parcela = 1; cobranca.PropostaID = contrato.ID; cobranca.Tipo = (int)Cobranca.eTipo.Normal; cobranca.Valor = valorTotal; cobranca.ValorPgto = cobranca.Valor; pm.Save(cobranca); List <CobrancaComposite> composite = new List <CobrancaComposite>(); Contrato.CalculaValorDaProposta2(cobranca.PropostaID, cobranca.DataVencimento, pm, false, true, ref composite, false); CobrancaComposite.Salvar(cobranca.ID, composite, pm); composite = null; } #endregion if (usuarioLiberadorID != null) { Contrato.SetaUsuarioLiberador(contrato.ID, usuarioLiberadorID, pm); } //Salva o titular titular.ContratoID = contrato.ID; titular.NumeroSequencial = 0; titular.Vigencia = contrato.Vigencia; if (titular.BeneficiarioID == null) { titular.BeneficiarioID = ContratoBeneficiario.CarregaTitularID(contrato.ID, pm); } if (titular.ID == null) { titular.ID = ContratoBeneficiario.CarregaID_ParaTitular(contrato.ID, pm); } //if (titular.ID != null) { pm.Load(titular); } nao pode carregar, pois sobrescreve dados preenchidos na tela else { titular.Tipo = Convert.ToInt32(ContratoBeneficiario.TipoRelacao.Titular); } //if (titular.ID == null) { titular.Status = (Int32)ContratoBeneficiario.eStatus.Novo; } /*else*/ if (titular.Status == Convert.ToInt32(ContratoBeneficiario.eStatus.Incluido)) { valorTotalContrato += titular.Valor; } if (novoContrato) { titular.Status = (Int32)ContratoBeneficiario.eStatus.Novo; titular.Data = contrato.Admissao; titular.Vigencia = contrato.Vigencia; } pm.Save(titular); #region Salva os dependentes if (dependentes != null) { CalendarioVencimento rcv = null; DateTime vigencia = DateTime.MinValue, vencimento = DateTime.MinValue; Int32 diasDataSemJuros = 0; Object valorDataLimite = null; foreach (ContratoBeneficiario dependente in dependentes) { if (dependente.NumeroSequencial < 0) { dependente.NumeroSequencial = ContratoBeneficiario.ProximoNumeroSequencial(contrato.ID, dependente.BeneficiarioID, pm); } dependente.ContratoID = contrato.ID; if (dependente.ID == null) { dependente.Status = (Int32)ContratoBeneficiario.eStatus.Novo; if (novoContrato) { dependente.Vigencia = contrato.Vigencia; } else { CalendarioAdmissaoVigencia.CalculaDatasDeVigenciaEVencimento(contrato.ContratoADMID, dependente.Data, out vigencia, out vencimento, out diasDataSemJuros, out valorDataLimite, out rcv, pm); dependente.Vigencia = vigencia; } } else if (dependente.Status == (Int32)ContratoBeneficiario.eStatus.Incluido) { valorTotalContrato += dependente.Valor; } pm.Save(dependente); } } #endregion //Salva as fichas de saúde dos beneficiários Boolean aprovadoPeloDepto = true; if (fichas != null && fichas.Length > 0) //&& Convert.ToInt32(contrato.ID) != 152685) { foreach (IList <ItemDeclaracaoSaudeINSTANCIA> lista in fichas) { if (lista == null) { continue; } foreach (ItemDeclaracaoSaudeINSTANCIA item in lista) { //Se id==null, tenta achar pelo id do beneficiario e do item de ficha de saude if (item.ID == null) { item.ID = ItemDeclaracaoSaudeINSTANCIA.CarregarID( item.BeneficiarioID, item.ItemDeclaracaoID, pm); } if (item.ID != null) { pm.Save(item); } else if (item.Sim) { pm.Save(item); } //se tem positivacao sem aprovacao do técnico, a proposta fica pendente if (item.Sim && !item.AprovadoPeloDeptoTecnico && aprovadoPeloDepto == true) { aprovadoPeloDepto = false; } } } } if (novoContrato && !aprovadoPeloDepto) //se o contrato é novo e há positivacoes nas fichas de saude SEM a aprovacao do Depto. Tecnico: { contrato.Pendente = true; pm.Save(contrato); } //salva os produtos adicionais contratados if (adicionalBeneficiario != null) { foreach (AdicionalBeneficiario ad in adicionalBeneficiario) { ad.PropostaID = contrato.ID; pm.Save(ad); } } ////checa historico de planos e atualiza a última entrada se necessário. //ContratoPlano obj = ContratoPlano.CarregarAtual(contrato.ID, pm); //if (obj != null) //{ // if (Convert.ToString(obj.PlanoID) != Convert.ToString(contrato.PlanoID)) // { // obj.PlanoID = contrato.PlanoID; // pm.Save(obj); // } // obj = null; //} //checa almoxarifado - contrato impresso String letra = ""; if (PrimeiraPosicaoELetra(contrato.Numero)) { letra = contrato.Numero.Substring(0, 1); } AlmoxContratoImpresso aci = null; //if (!String.IsNullOrEmpty(letra)) // aci = AlmoxContratoImpresso.Carregar(contrato.OperadoraID, contrato.Numero.Replace(letra, ""), letra, -1, pm); //else // aci = AlmoxContratoImpresso.Carregar(contrato.OperadoraID, contrato.Numero, letra, -1, pm); if (aci != null && aci.AgenteID == null) { aci.AgenteID = contrato.DonoID; aci.Data = contrato.Data; pm.Save(aci); } else if (aci == null) { #region IMPOSSIVEL //aci = new AlmoxContratoImpresso(); //aci.AgenteID = contrato.DonoID; //aci.Data = contrato.Data; //aci.MovID = null; //????? //aci.Numero = contrato.Numero; //aci.OperadoraID = contrato.OperadoraID; //aci.ProdutoID = null; //????? ////pm.Save(aci); #endregion } //Altera status da proposta em conferencia / cadastro if (conferencia != null) { conferencia.Carregar(); conferencia.Departamento = 6; //TODO: corrigir (Int32)ContratoStatusHistorico.eStatus.Cadastrado; pm.Save(conferencia); ContratoStatusHistorico.Salvar(contrato.Numero, contrato.OperadoraID, ContratoStatusHistorico.eStatus.Cadastrado, pm); } else if (novoContrato) { ContratoStatusHistorico.Salvar(contrato.Numero, contrato.OperadoraID, ContratoStatusHistorico.eStatus.Cadastrado, pm); } //Checa se é necessário gravar o valor total do contrato if (valorTotalContrato > 0) { ContratoValor.InsereNovoValorSeNecessario(contrato.ID, valorTotalContrato, pm); } pm.Commit(); } catch (Exception ex) { pm.Rollback(); throw ex; } finally { pm = null; } }