public IActionResult EditEntrada(AnimaisEntrada animaisEntrada) { /*if(animaisEntrada.CobraDiaria == EnumSimNao.NÃO) * { * //animaisEntrada.ServicoId = null; * animaisEntrada.Valor = null; * animaisEntrada.ValorOriginal = null; * * }*/ animaisEntrada.DataValidade = animaisEntrada.DataSaida; _context.AnimaisEntradas.Update(animaisEntrada); _context.SaveChanges(); return(RedirectToRoute(new { Controller = "Animal", Action = "Edit", id = animaisEntrada.AnimaisId })); }
public IActionResult AddEntrada(int idAnimais) { //https://www.talkingdotnet.com/handle-ajax-requests-in-asp-net-core-razor-pages/ //http://binaryintellect.net/articles/16ecfe49-98df-4305-b53f-2438d836f0d0.aspx string retorno = null; { MemoryStream stream = new MemoryStream(); Request.Body.CopyTo(stream); stream.Position = 0; using (StreamReader reader = new StreamReader(stream)) { string requestBody = reader.ReadToEnd(); if (requestBody.Length > 0) { //var obj = JsonConvert.DeserializeObject<AnimaisServicos>(requestBody); AnimaisEntrada ObjAnimaisEntrada = JsonConvert.DeserializeObject <AnimaisEntrada>(requestBody); //string teste = ObjAnimaisServicos.ValorOriginal //string valor = ObjAnimaisServicos.Valor.ToString().Replace(",", "."); //https://pt.stackoverflow.com/questions/243124/como-limitar-casas-decimais-usando-c //ObjAnimaisServicos.Valor = Convert.ToDecimal(ObjAnimaisServicos.Valor, new CultureInfo("pt-BR")); ObjAnimaisEntrada.DataValidade = Convert.ToDateTime("31/12/9999"); ObjAnimaisEntrada.DataUltimaApuracao = ObjAnimaisEntrada.DataEntrada; _context.AnimaisEntradas.Add(ObjAnimaisEntrada); _context.SaveChanges(); retorno = "NOVO"; return(new JsonResult(retorno)); } } } return(new JsonResult(retorno)); }
public IActionResult Create(Faturamento faturamento) { string mes = faturamento.DataApuracao.Value.Month.ToString().PadLeft(2, '0'); string ano = faturamento.DataApuracao.Value.Year.ToString(); //string referencia = mes + "/" + ano; string referencia = faturamento.Referencia; Faturamento objFaturamento = new Faturamento(); int FaturaId = 0; //Verifica se já existe faturamento para o proprietário para o mês de referência //int FaturaId = RetornaFatura(faturamento.ProprietarioId, referencia); /* * if (FaturaId == null) * { * //Cria o registro de faturamento * * objFaturamento.ProprietarioId = faturamento.ProprietarioId; * objFaturamento.Valor = "0,00"; * objFaturamento.Situacao = FaturamentoSituacao.PENDENTE; * objFaturamento.Data = DateTime.Now; * objFaturamento.Referencia = faturamento.Referencia; * * _context.Faturamentos.Add(objFaturamento); * _context.SaveChanges(); * * FaturaId = objFaturamento.Id; * }*/ List <AnimaisServicos> listServicoProprietario = new List <AnimaisServicos>(); #region Identifica os serviços realizados para animais vinculados em Proprietários para o período. if (faturamento.ProprietarioId != 0) { listServicoProprietario = (from p in _context.Proprietarios join ap in _context.AnimaisProprietarios on p.Id equals ap.ProprietarioId join a in _context.Animais on ap.AnimaisId equals a.Id join aass in _context.AnimaisServicos on a.Id equals aass.AnimaisId where aass.Data.ToString("MM/yyyy") == referencia && p.Id == faturamento.ProprietarioId && aass.Data <= faturamento.DataApuracao && p.Situacao == Situacao.ATIVO && ap.DataAquisicao <= faturamento.DataApuracao && ap.DataValidade > faturamento.DataApuracao && aass.Faturamento == "N" && aass.ServicoSituacao == ServicoSituacao.REALIZADO select new AnimaisServicos { Id = aass.Id } ).Distinct().ToList(); } else { listServicoProprietario = (from p in _context.Proprietarios join ap in _context.AnimaisProprietarios on p.Id equals ap.ProprietarioId join a in _context.Animais on ap.AnimaisId equals a.Id join aass in _context.AnimaisServicos on a.Id equals aass.AnimaisId where aass.Data.ToString("MM/yyyy") == referencia && aass.Data <= faturamento.DataApuracao && p.Situacao == Situacao.ATIVO && ap.DataAquisicao <= faturamento.DataApuracao && ap.DataValidade > faturamento.DataApuracao && aass.Faturamento == "N" && aass.ServicoSituacao == ServicoSituacao.REALIZADO select new AnimaisServicos { Id = aass.Id } ).Distinct().ToList(); } #endregion //Inicia o processo apenas se existirem serviços lançados em animais que possuem proprietário if (listServicoProprietario.Count > 0) { foreach (var item in listServicoProprietario) { AnimaisServicos ObjAnimaisServicos = _context.AnimaisServicos.FirstOrDefault(s => s.Id == item.Id); if (listServicoProprietario.Count > 0) { //Verifica se o animal possui proprietário apto para cobrança de acordo com a data de realização do serviço. List <Proprietario> LstProprietario = (from ap in _context.AnimaisProprietarios join p in _context.Proprietarios on ap.ProprietarioId equals p.Id join a in _context.Animais on ap.AnimaisId equals a.Id join aass in _context.AnimaisServicos on a.Id equals aass.AnimaisId where aass.Id == item.Id && ap.AnimaisId == ObjAnimaisServicos.AnimaisId && p.Situacao == Situacao.ATIVO && ap.DataAquisicao <= ObjAnimaisServicos.Data && ap.DataValidade > ObjAnimaisServicos.Data && aass.Faturamento == "N" && aass.ServicoSituacao == ServicoSituacao.REALIZADO select p).ToList(); int totalProprietario = LstProprietario.Count(); //Quando o animal do serviço realizado possui mais de um proprietário realiza loop para rateio do serviço que será faturado. if (totalProprietario >= 2) { for (int i = 0; i < LstProprietario.Count(); i++) { //Verifica se existe fatura o Proprietário para referência informada FaturaId = RetornaFatura(LstProprietario[i].Id, referencia); FaturamentoServicos faturamentoServicos = new FaturamentoServicos(); faturamentoServicos.ProprietarioId = LstProprietario[i].Id; faturamentoServicos.AnimaisServicosId = ObjAnimaisServicos.Id; faturamentoServicos.AnimaisId = ObjAnimaisServicos.AnimaisId; faturamentoServicos.ServicoId = ObjAnimaisServicos.ServicoId; decimal valor = ((Convert.ToDecimal(ObjAnimaisServicos.ValorTotal) / 100) / totalProprietario); //faturamentoServicos.Valor = Decimal.Round((valor), 2).ToString(); faturamentoServicos.Valor = Convert.ToDecimal(valor).ToString(); faturamentoServicos.DataFaturamento = DateTime.Now; //DateTime dataReferenciaFormatada = Convert.ToDateTime(faturamento.Referencia); faturamentoServicos.Referencia = referencia; faturamentoServicos.FaturamentoId = FaturaId; faturamentoServicos.DoadoraId = ObjAnimaisServicos.DoadoraId; faturamentoServicos.GaranhaoId = ObjAnimaisServicos.GaranhaoId; faturamentoServicos.ReceptoraId = ObjAnimaisServicos.ReceptoraId; faturamentoServicos.SemenId = ObjAnimaisServicos.SemenId; //Adiciona o serviço que passou pelo rateio na lista de serviços do proprietário. _context.FaturamentoServicos.Add(faturamentoServicos); _context.SaveChanges(); } } else { //Verifica se existe fatura o Proprietário para referência informada FaturaId = RetornaFatura(LstProprietario[0].Id, referencia); FaturamentoServicos faturamentoServicos = new FaturamentoServicos(); faturamentoServicos.ProprietarioId = LstProprietario[0].Id; faturamentoServicos.AnimaisServicosId = ObjAnimaisServicos.Id; faturamentoServicos.AnimaisId = ObjAnimaisServicos.AnimaisId; faturamentoServicos.ServicoId = ObjAnimaisServicos.ServicoId; faturamentoServicos.Valor = (Convert.ToDecimal(ObjAnimaisServicos.ValorTotal) / 100).ToString(); faturamentoServicos.DataFaturamento = DateTime.Now; //DateTime dataReferenciaFormatada = Convert.ToDateTime(faturamento.Referencia); faturamentoServicos.Referencia = referencia; faturamentoServicos.FaturamentoId = FaturaId; faturamentoServicos.DoadoraId = ObjAnimaisServicos.DoadoraId; faturamentoServicos.GaranhaoId = ObjAnimaisServicos.GaranhaoId; faturamentoServicos.ReceptoraId = ObjAnimaisServicos.ReceptoraId; faturamentoServicos.SemenId = ObjAnimaisServicos.SemenId; _context.FaturamentoServicos.Add(faturamentoServicos); _context.SaveChanges(); } } //Atualiza o serviço realizado no animal para item incluído no processo de faturamento. ObjAnimaisServicos.Faturamento = "S"; _context.AnimaisServicos.Update(ObjAnimaisServicos); _context.SaveChanges(); } } //Após o processo de validação e rateio dos serviços do proprietário devem ser criadas as informações na tabela Faturamento //e atualizar os vinculos com a tabela faturamentoservicos. List <Faturamento> LstFaturamento = (from fs in _context.FaturamentoServicos join p in _context.Proprietarios on fs.ProprietarioId equals p.Id //where fs.Referencia.ToString("MM/yyyy") == faturamento.Referencia where fs.Referencia == referencia group fs by fs.Proprietario into g select new Faturamento { Proprietario = g.Key, Valor = g.Sum(s => Convert.ToDecimal(s.Valor) / 100).ToString(), Situacao = FaturamentoSituacao.PENDENTE, Referencia = g.First().Referencia } ).ToList(); //////////////////////////Processo de Faturamento das Diárias/////////////////////////////////////////////// /// List <AnimaisEntrada> listEntradasProprietario = new List <AnimaisEntrada>(); #region Identifica as entradas para animais vinculados em Proprietários para o período. if (faturamento.ProprietarioId != 0) { listEntradasProprietario = (from p in _context.Proprietarios join ap in _context.AnimaisProprietarios on p.Id equals ap.ProprietarioId join a in _context.Animais on ap.AnimaisId equals a.Id join aa in _context.AnimaisEntradas on a.Id equals aa.AnimaisId where p.Id == faturamento.ProprietarioId && p.Situacao == Situacao.ATIVO && aa.DiariaSituacao != DiariaSituacao.CANCELADA && ap.DataAquisicao < faturamento.DataApuracao && ap.DataValidade >= faturamento.DataApuracao && aa.DataUltimaApuracao < faturamento.DataApuracao group aa by aa.Id into agroup select new AnimaisEntrada { Id = agroup.First().Id }).ToList(); } else { listEntradasProprietario = (from p in _context.Proprietarios join ap in _context.AnimaisProprietarios on p.Id equals ap.ProprietarioId join a in _context.Animais on ap.AnimaisId equals a.Id join aa in _context.AnimaisEntradas on a.Id equals aa.AnimaisId where p.Situacao == Situacao.ATIVO && ap.DataAquisicao < faturamento.DataApuracao && ap.DataValidade >= faturamento.DataApuracao && aa.DiariaSituacao != DiariaSituacao.CANCELADA && aa.DataUltimaApuracao < faturamento.DataApuracao group aa by aa.Id into agroup select new AnimaisEntrada { Id = agroup.First().Id }).ToList(); } #endregion //Inicia o processo se encontrar lançamentos de diárias para animais que possuem proprietário if (listEntradasProprietario.Count > 0) { foreach (var item in listEntradasProprietario) { //Verifica as informações de datas que devem ser cobradas para cada proprietário do animal. var dadosFat = (from ap in _context.AnimaisProprietarios join a in _context.Animais on ap.AnimaisId equals a.Id join ae in _context.AnimaisEntradas on a.Id equals ae.AnimaisId where ae.Id == item.Id && Convert.ToDateTime(ap.DataValidade.ToString("MM/yyyy")) > Convert.ToDateTime(referencia) select ap ).ToList(); List <DadosProprietarioEntrada> objDados = new List <DadosProprietarioEntrada>(); foreach (var iFat in dadosFat) { DateTime PrimeiroDiadoMes = DateTime.Parse("01/" + referencia); DadosProprietarioEntrada objDadosProprietario = new DadosProprietarioEntrada(); objDadosProprietario.DataAquisicao = iFat.DataAquisicao; objDadosProprietario.DataUltimaApuracao = (DateTime)iFat.DataUltimaApuracao; objDadosProprietario.ProprietarioId = (int)iFat.ProprietarioId; if (PrimeiroDiadoMes > iFat.DataUltimaApuracao) { objDadosProprietario.Dias = faturamento.DataApuracao.Value.Subtract(PrimeiroDiadoMes).Days; } else { objDadosProprietario.Dias = faturamento.DataApuracao.Value.Subtract((DateTime)iFat.DataUltimaApuracao).Days; } objDados.Add(objDadosProprietario); } //Processo para definir o fator de divisão para o proprietário. AnimaisEntrada ObjAnimaisEntradas = _context.AnimaisEntradas.FirstOrDefault(s => s.Id == item.Id); //Procura os proprietárioas associados ao animal que estão ativos no periodo de faturamento //Periodo de faturamento igual à data ultimo faturamento ou data de aquisição menos data faturamento List <AnimaisProprietario> LstProprietarioTeste = (from ap in _context.AnimaisProprietarios join a in _context.Animais on ap.AnimaisId equals a.Id where a.Id == ObjAnimaisEntradas.AnimaisId && Convert.ToDateTime(ap.DataValidade.ToString("MM/yyyy")) > Convert.ToDateTime(referencia) select ap ).ToList(); //Verifica se o animal possui proprietário apto para cobrança de acordo com a data de realização do serviço. List <Proprietario> LstProprietario = (from ap in _context.AnimaisProprietarios join p in _context.Proprietarios on ap.ProprietarioId equals p.Id join a in _context.Animais on ap.AnimaisId equals a.Id join aa in _context.AnimaisEntradas on a.Id equals aa.AnimaisId where aa.Id == item.Id && ap.AnimaisId == ObjAnimaisEntradas.AnimaisId && p.Situacao == Situacao.ATIVO && ap.DataAquisicao < faturamento.DataApuracao && ap.DataValidade >= faturamento.DataApuracao select p).ToList(); int totalProprietario = LstProprietario.Count(); if (totalProprietario > 0) { //Quando o animal do serviço realizado possui mais de um proprietário realiza loop para rateio do serviço que será faturado. if (totalProprietario >= 2) { for (int i = 0; i < LstProprietario.Count(); i++) { //Verifica se existe fatura o Proprietário para referência informada FaturaId = RetornaFatura(LstProprietario[i].Id, referencia); FaturamentoEntradas faturamentoEntradas = new FaturamentoEntradas(); faturamentoEntradas.ProprietarioId = LstProprietario[i].Id; faturamentoEntradas.AnimaisEntradasId = ObjAnimaisEntradas.Id; faturamentoEntradas.AnimaisId = ObjAnimaisEntradas.AnimaisId; faturamentoEntradas.ServicoId = ObjAnimaisEntradas.ServicoId; decimal diaria = ((Convert.ToDecimal(ObjAnimaisEntradas.Valor) / 100) / totalProprietario); faturamentoEntradas.Diaria = diaria; //Verificar a data de aquisição do animal pelo proprietário //Calcular a quantidade de dias do mes ainda não apurados de acordo com a data de apuração informada. //Dias => data apuração informada - data ultima apuração DateTime?data1 = ObjAnimaisEntradas.DataUltimaApuracao; DateTime?data2 = faturamento.DataApuracao; TimeSpan?totalDias = data2 - data1; int dias = totalDias.Value.Days; faturamentoEntradas.Dias = dias; faturamentoEntradas.Valor = (diaria * dias).ToString(); faturamentoEntradas.DataFaturamento = DateTime.Now; faturamentoEntradas.Referencia = referencia; faturamentoEntradas.FaturamentoId = FaturaId; //Adiciona o serviço que passou pelo rateio na lista de serviços do proprietário. _context.FaturamentoEntradas.Add(faturamentoEntradas); AnimaisProprietario ObjAnimaisProprietarios = (from ap in _context.AnimaisProprietarios where ap.ProprietarioId == LstProprietario[i].Id select ap).FirstOrDefault(); ObjAnimaisProprietarios.DataUltimaApuracao = faturamento.DataApuracao; _context.AnimaisProprietarios.Update(ObjAnimaisProprietarios); _context.SaveChanges(); } } else if (totalProprietario == 1) { //Verifica se existe fatura o Proprietário para referência informada FaturaId = RetornaFatura(LstProprietario[0].Id, referencia); FaturamentoEntradas faturamentoEntradas = new FaturamentoEntradas(); faturamentoEntradas.ProprietarioId = listEntradasProprietario[0].Id; faturamentoEntradas.AnimaisEntradasId = ObjAnimaisEntradas.Id; faturamentoEntradas.AnimaisId = ObjAnimaisEntradas.AnimaisId; faturamentoEntradas.ServicoId = ObjAnimaisEntradas.ServicoId; decimal diaria = (Convert.ToDecimal(ObjAnimaisEntradas.Valor) / 100); faturamentoEntradas.Diaria = diaria; //Calcular a quantidade de dias do mes ainda não apurados de acordo com a data de apuração informada. //Dias => data apuração informada - data ultima apuração DateTime?data1 = ObjAnimaisEntradas.DataUltimaApuracao; DateTime?data2 = faturamento.DataApuracao; TimeSpan?totalDias = data2 - data1; int dias = totalDias.Value.Days; faturamentoEntradas.Dias = dias; faturamentoEntradas.Valor = (diaria * dias).ToString(); faturamentoEntradas.DataFaturamento = DateTime.Now; faturamentoEntradas.Referencia = referencia; faturamentoEntradas.FaturamentoId = FaturaId; //Adiciona o serviço que passou pelo rateio na lista de serviços do proprietário. _context.FaturamentoEntradas.Add(faturamentoEntradas); AnimaisProprietario ObjAnimaisProprietarios = (from ap in _context.AnimaisProprietarios where ap.ProprietarioId == LstProprietario[0].Id select ap).FirstOrDefault(); ObjAnimaisProprietarios.DataUltimaApuracao = faturamento.DataApuracao; _context.AnimaisProprietarios.Update(ObjAnimaisProprietarios); _context.SaveChanges(); } //Atualiza o serviço realizado no animal para item incluído no processo de faturamento. ObjAnimaisEntradas.DataUltimaApuracao = faturamento.DataApuracao; _context.AnimaisEntradas.Update(ObjAnimaisEntradas); _context.SaveChanges(); } } } //Atualiza o faturamento apenas se existerem registros de entradas ou serviços if (listServicoProprietario.Count > 0 || listEntradasProprietario.Count > 0) { AtualizaFaturamento(FaturaId); } return(RedirectToAction("Index")); }