public Boolean SalvarEntrada(AlmoxMovimentacao movimentacao, ref String msgRetorno, Object operadoraId) { AlmoxProduto prod = new AlmoxProduto(); prod.ID = movimentacao.ProdutoID; prod.Carregar(); AlmoxTipoProduto tipo = new AlmoxTipoProduto(); tipo.ID = prod.TipoProdutoID; tipo.Carregar(); if ((AlmoxMovimentacao.SubTipoMovimentacao)movimentacao.SubTipoDeMovimentacao == AlmoxMovimentacao.SubTipoMovimentacao.Normal) { if (tipo.Numerado) { //checa se existe Boolean existe = AlmoxMovimentacao.ExisteIntervalo( movimentacao.NumeracaoInicial, movimentacao.NumeracaoFinal, operadoraId, movimentacao.QtdZerosAEsquerda, movimentacao.Letra); if (existe) { msgRetorno = "Intervalo de numeração inválido."; return(false); } } } else if ((AlmoxMovimentacao.SubTipoMovimentacao)movimentacao.SubTipoDeMovimentacao == AlmoxMovimentacao.SubTipoMovimentacao.Devolucao) { //checa se existe Boolean existe = AlmoxMovimentacao.ExisteIntervalo( movimentacao.NumeracaoInicial, movimentacao.NumeracaoFinal, operadoraId, movimentacao.QtdZerosAEsquerda, movimentacao.Letra); if (!existe) { msgRetorno = "Intervalo de numeração inálido."; return(false); } //checa se foi retirado do estoque. se nao foi, nao deixa devolver existe = AlmoxMovimentacao.ExisteIntervaloRetirado(movimentacao.NumeracaoInicial, movimentacao.NumeracaoFinal, prod.ID, movimentacao.QtdZerosAEsquerda, movimentacao.Letra); if (!existe) { msgRetorno = "Impossível gravar esse intervalo de numeração.<br>Ele está em estoque integral ou parcialmente."; return(false); } } movimentacao.TipoDeMovimentacao = (int)AlmoxMovimentacao.TipoMovimentacao.Entrada; PersistenceManager pm = new PersistenceManager(); pm.TransactionContext(); try { pm.Save(movimentacao); prod.QTD += movimentacao.QTD; pm.Save(prod); //cria os contratos impressos if ((AlmoxMovimentacao.SubTipoMovimentacao)movimentacao.SubTipoDeMovimentacao == AlmoxMovimentacao.SubTipoMovimentacao.Normal && tipo.Numerado) { for (int i = movimentacao.NumeracaoInicial; i <= movimentacao.NumeracaoFinal; i++) { AlmoxContratoImpresso aci = new AlmoxContratoImpresso(); aci.Numero = i; aci.QtdZerosAEsquerda = movimentacao.QtdZerosAEsquerda; if (!String.IsNullOrEmpty(movimentacao.Letra)) { aci.Letra = movimentacao.Letra; } #region gera numero do contrato impresso //if (movimentacao.QtdZerosAEsquerda > 0) //{ //String mascara = new String('0', movimentacao.QtdZerosAEsquerda); // aci.Numero = String.Format("{0:" + mascara + "}", i); //} //else // aci.Numero = i; //if (!String.IsNullOrEmpty(movimentacao.Letra)) // aci.Numero = movimentacao.Letra + aci.Numero; #endregion aci.MovID = movimentacao.ID; aci.ProdutoID = movimentacao.ProdutoID; pm.Save(aci); //gera log historico de alteracao de status ContratoStatusHistorico.Salvar(i, movimentacao.QtdZerosAEsquerda, movimentacao.Letra, operadoraId, ContratoStatusHistorico.eStatus.NoEstoque, pm); } } //remove impresso do corretor else if (tipo.Numerado && (AlmoxMovimentacao.SubTipoMovimentacao)movimentacao.SubTipoDeMovimentacao == AlmoxMovimentacao.SubTipoMovimentacao.Devolucao) { String numero = ""; for (int i = movimentacao.NumeracaoInicial; i <= movimentacao.NumeracaoFinal; i++) { #region gera numero do contrato impresso //numero = EntityBase.GeraNumeroDeContrato(i, movimentacao.QtdZerosAEsquerda, movimentacao.Letra); ////if (movimentacao.QtdZerosAEsquerda > 0) ////{ //// String mascara = new String('0', movimentacao.QtdZerosAEsquerda); //// numero = String.Format("{0:" + mascara + "}", i); ////} ////else //// numero = i.ToString(); ////if (!String.IsNullOrEmpty(movimentacao.Letra)) //// numero = movimentacao.Letra + numero; #endregion //checa se foi usando em contrato. se foi, nao deixa devolver if (Contrato.NumeroDeContratoEmUso(i.ToString(), movimentacao.Letra, movimentacao.QtdZerosAEsquerda, operadoraId, pm)) { pm.Rollback(); msgRetorno = "O contrato de número " + numero + " está em uso.";; return(false); } //remove do produtor AlmoxContratoImpresso.RetiraDeProdutor(movimentacao.ProdutoID, i, movimentacao.Letra, movimentacao.QtdZerosAEsquerda, pm); //gera log historico de alteracao de status ContratoStatusHistorico.Salvar(i, movimentacao.QtdZerosAEsquerda, movimentacao.Letra, operadoraId, ContratoStatusHistorico.eStatus.NoEstoque, pm); } } if ((AlmoxMovimentacao.SubTipoMovimentacao)movimentacao.SubTipoDeMovimentacao == AlmoxMovimentacao.SubTipoMovimentacao.Devolucao) { //remove do corretor if (tipo.Numerado) { Boolean result = false; for (int i = movimentacao.NumeracaoInicial; i <= movimentacao.NumeracaoFinal; i++) { result = ProdutoCorretor.Remove( movimentacao.UsuarioRetiradaID, prod.ID, i, 0, pm); if (!result) { pm.Rollback(); msgRetorno = "Não foi possível efetivar a operação.\\nCertifique-se de ter informados corretamente os parâmetros."; return(false); } } } else { Boolean result = ProdutoCorretor.Remove( movimentacao.UsuarioRetiradaID, prod.ID, 0, movimentacao.QTD, pm); if (!result) { pm.Rollback(); msgRetorno = "Não foi possível efetivar a operação.\\nCertifique-se de ter informado corretamente os parâmetros."; return(false); } } } pm.Commit(); } catch (Exception ex) { pm.Rollback(); throw ex; } finally { pm = null; } return(true); }
public Boolean SalvarSaida(AlmoxMovimentacao movimentacao, ref String msgRetorno) { movimentacao.TipoDeMovimentacao = (int)AlmoxMovimentacao.TipoMovimentacao.Saida; PersistenceManager pm = new PersistenceManager(); pm.BeginTransactionContext(); AlmoxProduto prod = new AlmoxProduto(); prod.ID = movimentacao.ProdutoID; pm.Load(prod); AlmoxTipoProduto tipo = new AlmoxTipoProduto(); tipo.ID = prod.TipoProdutoID; pm.Load(tipo); //checa se o intervalo a ser retirado é válido Boolean result = false; if (tipo.Numerado) { result = AlmoxMovimentacao.ExisteIntervalo(movimentacao.NumeracaoInicial, movimentacao.NumeracaoFinal, prod.OperadoraID, movimentacao.QtdZerosAEsquerda, movimentacao.Letra); if (!result) { msgRetorno = "Intervalo inválido."; pm.Rollback(); pm = null; return(false); } result = AlmoxContratoImpresso.ExisteIntervaloRetirado(movimentacao.NumeracaoInicial, movimentacao.NumeracaoFinal, movimentacao.QtdZerosAEsquerda, movimentacao.Letra, prod.OperadoraID, pm); if (result) { msgRetorno = "Intervalo já retirado do estoque."; pm.Rollback(); pm = null; return(false); } } else { //checa se tem em estoque if (prod.QTD < movimentacao.QTD) { msgRetorno = "Quantidade indisponível no estoque."; pm.Rollback(); pm = null; return(false); } } try { pm.Save(movimentacao); //altera os dados flutuantes da movimentacao de entrada if (movimentacao.MovimentacaoID != null) { AlmoxMovimentacao fonte = new AlmoxMovimentacao(); fonte.ID = movimentacao.MovimentacaoID; pm.Load(fonte); fonte.QTDFlutuante -= movimentacao.QTD; if (tipo.Numerado) { fonte.NumeracaoInicialFlutuante += movimentacao.NumeracaoFinal; } else { fonte.NumeracaoInicialFlutuante += movimentacao.QTD; } pm.Save(fonte); if (movimentacao.SubTipoDeMovimentacao == (int)AlmoxMovimentacao.SubTipoMovimentacao.Normal) { //seta o relacionamento entre corretor e a proposta String numero = ""; for (int i = movimentacao.NumeracaoInicial; i <= movimentacao.NumeracaoFinal; i++) { ProdutoCorretor pc = new ProdutoCorretor(); pc.AgenteID = movimentacao.UsuarioRetiradaID; pc.ProdutoID = movimentacao.ProdutoID; pc.ProdutoNumero = i; pc.ProdutoQTD = movimentacao.QTD; pc.EntradaID = movimentacao.MovimentacaoID; pm.Save(pc); if (tipo.Numerado) { #region gera numero do contrato impresso //if (movimentacao.QtdZerosAEsquerda > 0) //{ // String mascara = new String('0', movimentacao.QtdZerosAEsquerda); // numero = String.Format("{0:" + mascara + "}", i); //} //else // numero = i.ToString(); //if (!String.IsNullOrEmpty(movimentacao.Letra)) // numero = movimentacao.Letra + numero; numero = i.ToString(); #endregion AlmoxContratoImpresso.SetaProdutor( movimentacao.UsuarioRetiradaID, movimentacao.ProdutoID, numero, movimentacao.Letra, movimentacao.QtdZerosAEsquerda, pm); ContratoStatusHistorico.Salvar(i, movimentacao.QtdZerosAEsquerda, movimentacao.Letra, prod.OperadoraID, ContratoStatusHistorico.eStatus.ComCorretor, pm); } } } } //altera a quantidade disponível em estoque prod.QTD -= movimentacao.QTD; pm.Save(prod); pm.Commit(); //commit! } catch (Exception ex) { pm.Rollback(); throw ex; } finally { pm = null; } return(true); }
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; } }