Esempio n. 1
0
        private void btnFecharReabrir_Click(object sender, EventArgs e)
        {
            // Verifica se vai fechar
            if (!faturamentos[index].fechado)
            {
                // Vai fechar

                if (MessageBox.Show("Tem certeza que quer fechar o faturamento?",
                                    "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Faturamento faturamentoAtualizado = faturamentos[index];

                    String mensagemRetorno = "";

                    // Verifica se fechou com sucesso
                    if (FaturamentoServicos.fechaFaturamento(ref faturamentoAtualizado, ref mensagemRetorno))
                    {
                        faturamentos[index] = faturamentoAtualizado;

                        fillFields();

                        if (MessageBox.Show("Gostaria de imprimir o recibo?",
                                            "Recibo de Faturamento", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            btnImprimirRecibo_Click(null, null);
                        }
                    }
                    else
                    {
                        MessageBox.Show(String.Format("Não foi possível fechar o faturamento.\n\n{0}", mensagemRetorno),
                                        "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }
                }
            }
            else
            {
                // Vai reabrir

                if (MessageBox.Show("Tem certeza que quer reabrir o faturamento?",
                                    "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Faturamento faturamentoAtualizado = faturamentos[index];

                    String mensagemRetorno = "";

                    // Verifica se reabriu com sucesso
                    if (FaturamentoServicos.reabreFaturamento(ref faturamentoAtualizado, ref mensagemRetorno))
                    {
                        faturamentos[index] = faturamentoAtualizado;

                        fillFields();
                    }
                    else
                    {
                        MessageBox.Show(String.Format("Não foi possível reabrir o faturamento.\n\n{0}", mensagemRetorno),
                                        "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }
                }
            }
        }
        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            Faturamento_OrcamentoFiltroRelatorio faturamentoFiltroRelatorio;

            if (rdbtOrcamento.Checked)
            {
                faturamentoFiltroRelatorio = new Faturamento_OrcamentoFiltroRelatorio(Faturamento_OrcamentoFiltroRelatorio.TipoRelatorio.Orcamento);
            }
            else
            {
                faturamentoFiltroRelatorio = new Faturamento_OrcamentoFiltroRelatorio(Faturamento_OrcamentoFiltroRelatorio.TipoRelatorio.Faturamento);
            }

            faturamentoFiltroRelatorio.apenasFechados = chkApenasFechado.Checked;

            if (chkFormasPagamento.Checked)
            {
                faturamentoFiltroRelatorio.formasPagamentoSelecionadas = chkLstFormasPagamento.CheckedItems.OfType <FormaPagamento>().ToList();
            }
            if (chkServicos.Checked)
            {
                faturamentoFiltroRelatorio.servicosSelecionados = chkLstServicos.CheckedItems.OfType <Servico>().ToList();
            }
            if (chkCustosAdicionais.Checked)
            {
                faturamentoFiltroRelatorio.custosAdicionaisSelecionados = chkLstCustosAdicionais.CheckedItems.OfType <Servico>().ToList();
            }
            if (chkCliente.Checked)
            {
                faturamentoFiltroRelatorio.clientesSelecionados = chkLstClientes.CheckedItems.OfType <Cliente>().ToList();
            }
            if (chkDataCriacao.Checked)
            {
                DateTime _dtCriacaoInicio, _dtCriacaoFim;
                DateTime.TryParse(txtDtCriacaoInicio.Text.ToString(), out _dtCriacaoInicio);
                DateTime.TryParse(txtDtCriacaoFim.Text.ToString(), out _dtCriacaoFim);

                faturamentoFiltroRelatorio.dtCriacaoInicio = _dtCriacaoInicio;
                faturamentoFiltroRelatorio.dtCriacaoFim    = _dtCriacaoFim;
            }
            if (chkDataFechamento.Checked)
            {
                DateTime _dtEncerramentoInicio, _dtEncerramentoFim;
                DateTime.TryParse(txtDtCriacaoInicio.Text.ToString(), out _dtEncerramentoInicio);
                DateTime.TryParse(txtDtCriacaoFim.Text.ToString(), out _dtEncerramentoFim);

                faturamentoFiltroRelatorio.dtEncerramentoInicio = _dtEncerramentoInicio;
                faturamentoFiltroRelatorio.dtEncerramentoFim    = _dtEncerramentoFim;
            }

            if (faturamentoFiltroRelatorio.tpRelatorio == Faturamento_OrcamentoFiltroRelatorio.TipoRelatorio.Orcamento)
            {
                refreshDataGridView(faturamentoFiltroRelatorio.tpRelatorio, OrcamentoServicos.reportOrcamento(faturamentoFiltroRelatorio));
            }
            else
            {
                refreshDataGridView(faturamentoFiltroRelatorio.tpRelatorio, FaturamentoServicos.reportFaturamento(faturamentoFiltroRelatorio));
            }
        }
Esempio n. 3
0
        private void txtOrcamento_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (index > -1)
            {
                int    numOrcamento   = faturamentos[index].numOrcamento;
                int    numFaturamento = faturamentos[index].id;
                String cliente        = faturamentos[index].cliente.nome;

                if (numOrcamento > 0)
                {
                    // Cria o menu de contexto
                    ContextMenuStrip  contextMenuStrip = new ContextMenuStrip();
                    ToolStripMenuItem toolStripMenuItem;

                    toolStripMenuItem        = new ToolStripMenuItem(String.Format("Desvicular orçamento {0} do faturamento {1}", numOrcamento, numFaturamento));
                    toolStripMenuItem.Click += (_sender, _e) => {
                        // desviculaOrcamentoDoFaturamento
                        faturamentos[index].numOrcamento = 0;
                        FaturamentoServicos.update(faturamentos[index]);

                        btnAtualizar_Click(null, null);
                    };
                    contextMenuStrip.Items.Add(toolStripMenuItem);

                    // Exibe o menu de contexto
                    contextMenuStrip.Show(this, this.PointToClient(MousePosition));
                }
                else
                {
                    // Cria o menu de contexto
                    ContextMenuStrip  contextMenuStrip = new ContextMenuStrip();
                    ToolStripMenuItem toolStripMenuItem;

                    toolStripMenuItem        = new ToolStripMenuItem(String.Format("Vincular faturamento {0} com orçamento do cliente {1}", numFaturamento, cliente));
                    toolStripMenuItem.Click += (_sender, _e) => {
                        // vincularOrcamentoAoFaturamento
                        consultaOrcamentoForm              = new ConsultaOrcamento(Util.TipoConsulta.Selecao, true, faturamentos[index].cliente.id);
                        consultaOrcamentoForm.FormClosing += (__sender, __e) => {
                            Orcamento orcamentoSelecionado = consultaOrcamentoForm.orcamentoSelecionado;

                            if (orcamentoSelecionado != null)
                            {
                                faturamentos[index].numOrcamento = orcamentoSelecionado.id;
                                FaturamentoServicos.update(faturamentos[index]);

                                btnAtualizar_Click(null, null);
                            }
                        };
                        consultaOrcamentoForm.Show();
                    };
                    contextMenuStrip.Items.Add(toolStripMenuItem);

                    // Exibe o menu de contexto
                    contextMenuStrip.Show(this, this.PointToClient(MousePosition));
                }
            }
        }
Esempio n. 4
0
 private void gravarServico_Custo(Servico servico, Servico.TipoServico tpServico)
 {
     if (tpServico == Servico.TipoServico.Servico)
     {
         FaturamentoServicos.updateServicosInFaturamento(servico, Servico.TipoServico.Servico);
     }
     else if (tpServico == Servico.TipoServico.CustoAdicional)
     {
         FaturamentoServicos.updateServicosInFaturamento(servico, Servico.TipoServico.CustoAdicional);
     }
 }
Esempio n. 5
0
        // Exclui o cliente
        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Confirma a deleção do registro ?" +
                                Environment.NewLine + Environment.NewLine +
                                faturamentos[index].ToString(), "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                FaturamentoServicos.delete(faturamentos[index]);

                index = -1;
                getFromRepositorio();
                clearFields();
            }
        }
Esempio n. 6
0
 private void criarServico_Custo(Servico servico, Servico.TipoServico tpServico)
 {
     if (tpServico == Servico.TipoServico.Servico)
     {
         FaturamentoServicos.createServicosInFaturamento(faturamentos[index], ref servico, Servico.TipoServico.Servico);
         faturamentos[index].servicos[faturamentos[index].servicos.Count - 1] = servico;
     }
     else if (tpServico == Servico.TipoServico.CustoAdicional)
     {
         FaturamentoServicos.createServicosInFaturamento(faturamentos[index], ref servico, Servico.TipoServico.CustoAdicional);
         faturamentos[index].custosAdicionais[faturamentos[index].custosAdicionais.Count - 1] = servico;
     }
 }
Esempio n. 7
0
        private void ConsultaOrcamentoForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Orcamento orcamentoSelecionado = consultaOrcamentoForm.orcamentoSelecionado;

            if (orcamentoSelecionado != null)
            {
                Faturamento newFaturamento = FaturamentoServicos.criaFaturamentoComBaseEmOrcamento(orcamentoSelecionado);

                FaturamentoServicos.create(ref newFaturamento);

                getFromRepositorio();
                btnUltimo_Click(null, null);
            }
        }
Esempio n. 8
0
        private void getFromRepositorio()
        {
            faturamentos = FaturamentoServicos.read();

            formasPagamento = FormaPagamentoServicos.Instance.read();
            cboFormasPagamento.Items.Clear();
            cboFormasPagamento.Items.AddRange(formasPagamento.ToArray());
            if (index > -1 && faturamentos[index].formaPagamento != null)
            {
                cboFormasPagamento.SelectedIndex = formasPagamento.FindIndex(find => find.id == faturamentos[index].formaPagamento.id);
            }
            else
            {
                cboFormasPagamento.SelectedIndex = -1;
            }
        }
Esempio n. 9
0
        // Salva as alterações do orçamento
        private void btnGravar_Click(object sender, EventArgs e)
        {
            // Cria um novo orçamento
            Faturamento newFaturamento;

            // Cria os dados básicos do orçamento
            int idCliente = -1; int.TryParse(txtCdCliente.Text, out idCliente);

            if (txtCdCliente.Text.Trim().Length == 0)
            {
                MessageBox.Show("Não foi possível salvar o faturamento.\n\nDeve ser selecionado um cliente",
                                "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
            }
            else
            {
                Cliente cliente = ClienteServicos.Instance.read(idCliente);
                Veiculo veiculo = (Veiculo)cboVeiculo.SelectedItem;

                newFaturamento = new Faturamento(cliente, veiculo);
                FormaPagamento formaPagamento = null;

                if (cboFormasPagamento.SelectedIndex > -1)
                {
                    formaPagamento = (FormaPagamento)cboFormasPagamento.SelectedItem;
                }

                newFaturamento.formaPagamento    = formaPagamento;
                newFaturamento._idFormaPagamento = formaPagamento != null ? formaPagamento.id : 0;


                // Verifica se vai inserir um novo registro ou então salvá-lo
                if (windowMode == Util.WindowMode.ModoDeInsercao)
                {
                    // Cria novo orçameto

                    if (FaturamentoServicos.create(ref newFaturamento))
                    {
                        getFromRepositorio();
                        btnUltimo_Click(null, null);
                    }
                    else
                    {
                        clearFields();
                    }
                }
                else if (windowMode == Util.WindowMode.ModoDeEdicao)
                {
                    // Grava orçamento já existente

                    newFaturamento.id               = faturamentos[index].id;
                    newFaturamento.servicos         = faturamentos[index].servicos;
                    newFaturamento.custosAdicionais = faturamentos[index].custosAdicionais;
                    newFaturamento.dataCriacao      = faturamentos[index].dataCriacao;
                    newFaturamento.numOrcamento     = faturamentos[index].numOrcamento;

                    if (cliente != null)
                    {
                        newFaturamento._idCliente = cliente.id;
                    }

                    if (veiculo != null)
                    {
                        newFaturamento._idVeiculo = veiculo.id;
                    }

                    if (FaturamentoServicos.update(newFaturamento))
                    {
                        getFromRepositorio();
                    }

                    fillFields();
                }

                windowMode = Util.WindowMode.ModoNormal;
                windowModeChanged();
            }
        }
Esempio n. 10
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"));
        }
Esempio n. 11
0
        public void FaturaProprietario(int idAnimalServico)
        {
            List <AnimaisServicos> 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
                                                              select
                                                              (
                                                                  aass
                                                              )).ToList();

            foreach (var item in listServicoProprietario)
            {
                AnimaisServicos ObjAnimaisServicos = _context.AnimaisServicos.FirstOrDefault(s => s.Id == item.Id);

                //Verifica se o animal precisa ter proprietário
                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
                                                       where ap.AnimaisId == ObjAnimaisServicos.AnimaisId &&
                                                       p.Situacao == Situacao.ATIVO &&
                                                       ap.DataAquisicao <= ObjAnimaisServicos.Data &&
                                                       ap.DataDesassociacao >= ObjAnimaisServicos.Data
                                                       select p).ToList();

                int totalProprietario = LstProprietario.Count();

                //Realiza o loop de proprietários e realiza o rateio.
                if (totalProprietario >= 2)
                {
                    LstProprietario.Count();

                    for (int i = 0; i < LstProprietario.Count(); i++)
                    {
                        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.DataFaturamento = DateTime.Now;
                        //faturamentoServicos.Referencia = DateTime.Now;

                        _context.FaturamentoServicos.Add(faturamentoServicos);
                        _context.SaveChanges();
                    }
                }
                else
                {
                    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;
                    //faturamentoServicos.Referencia = DateTime.Now;

                    _context.FaturamentoServicos.Add(faturamentoServicos);
                    _context.SaveChanges();
                }
            }
        }