Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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;
            }
        }