public void AtualizaValorDeCobrancas(Object contratoId, out String msg) { msg = ""; PersistenceManager pm = new PersistenceManager(); pm.BeginTransactionContext(); Contrato contrato = new Contrato(contratoId); pm.Load(contrato); if (contrato.Legado) { pm.Rollback(); return; } try { IList <Cobranca> cobrancas = Cobranca.CarregarTodas(contratoId, true, Cobranca.eTipo.Normal, pm); if (cobrancas != null) { List <CobrancaComposite> composite = null; foreach (Cobranca cobranca in cobrancas) { //if (cobranca.Pago) { continue; } if (cobranca.Parcela == 1) { continue; } //nao calcula a parcela 1 pq ela nao está na vigência do beneficiário if (cobranca.Tipo != Convert.ToInt32(Cobranca.eTipo.Normal)) { continue; } if (cobranca.DataVencimento.Year >= DateTime.Now.Year) //atualiza somente parcelas atuais { cobranca.Valor = Contrato.CalculaValorDaProposta2(contratoId, cobranca.DataVencimento, pm, false, true, ref composite, true); if (cobranca.Valor > 0) { if (!cobranca.Pago) { pm.Save(cobranca); } } else if (String.IsNullOrEmpty(msg)) { if (!cobranca.Pago) { msg = String.Concat("Data de vencimento ", cobranca.DataVencimento.ToString("dd/MM/yyyy"), " descoberta. Cobrança com valor incorreto."); continue; } } if (composite != null) { CobrancaComposite.Remover(cobranca.ID, pm); foreach (CobrancaComposite comp in composite) { comp.CobrancaID = cobranca.ID; pm.Save(comp); } } } } } pm.Commit(); } catch { pm.Rollback(); //throw; } finally { pm.Dispose(); 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; } }