示例#1
0
        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 }));
        }
示例#2
0
        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));
        }
示例#3
0
        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"));
        }