예제 #1
0
        /// <summary>
        /// Abre a janela para cadastro de novo pagamento
        /// </summary>
        /// <param name="venda">Venda vinculada a pagamento</param>
        public virtual void PrepararParaCadastro(IDadosVenda venda, Entidades.Pessoa.Pessoa pessoa)
        {
            pagamento = CriarEntidade();
            pagamento.Cliente = pessoa.Código;
            pagamento.CobrarJuros = true;
            
            if (venda != null)
                pagamento.Venda = venda.Código;

            chkCobrarJuros.Checked = pagamento.CobrarJuros;

            if (venda != null)
            {
                // A data inicial do pagamento é o mesmo da venda
                data.Value = venda.Data;
                pagamento.Data = data.Value;

                // O valor inicial do pagamento é aquele para acerto a vista na data da venda.
                Entidades.Relacionamento.Venda.Venda v = Entidades.Relacionamento.Venda.Venda.ObterVenda(venda.Código);
                if (v.Saldo < 0)
                {
                    pagamento.Valor = -v.Saldo;
                    txtValor.Double = -v.Saldo;
                }
                else
                {
                    pagamento.Valor = 0;
                    txtValor.Double = 0;
                }
            }

            txtValor.Focus();
        }
예제 #2
0
 public static IPagamento[] ObterPagamentos(IDadosVenda venda)
 {
     return Mapear<PagamentoGenérico>(
         string.Format(
             "SELECT t.*, COUNT(*) AS vendas FROM"
             + " ((SELECT p.codigo, p.cliente, p.valor, p.data, p.data AS vencimento, p.registradoPor, p.pendente FROM dinheiro d"
             + " JOIN pagamento p ON d.codigo = p.codigo"
             + " JOIN vinculovendapagamento v ON v.pagamento = p.codigo"
             + " AND v.venda = {0})"
             + " UNION (SELECT p.codigo, p.cliente, p.valor, p.data, p.data AS vencimento, p.registradoPor, p.pendente FROM credito cr"
             + " JOIN pagamento p ON cr.codigo = p.codigo"
             + " JOIN vinculovendapagamento v ON v.pagamento = p.codigo"
             + " AND v.venda = {0})"
             + " UNION (SELECT p.codigo, p.cliente, p.valor, p.data, n.vencimento, p.registradoPor, p.pendente FROM notapromissoria n"
             + " JOIN pagamento p ON n.codigo = p.codigo"
             + " JOIN vinculovendapagamento v ON v.pagamento = p.codigo"
             + " AND v.venda = {0})"
             + " UNION (SELECT p.codigo, p.cliente, p.valor, p.data, if(c.prorrogadopara is null, c.vencimento, c.prorrogadopara) as vencimento, p.registradoPor, p.pendente FROM cheque c"
             + " JOIN pagamento p ON c.codigo = p.codigo"
             + " JOIN vinculovendapagamento v ON v.pagamento = p.codigo"
             + " AND v.venda = {0}))"
             + " t JOIN vinculovendapagamento v ON v.pagamento = t.codigo"
             + " GROUP BY t.codigo, t.cliente, t.valor, t.data, t.vencimento, t.registradoPor, t.pendente",
             DbTransformar(venda.Código))).ToArray();
 }
예제 #3
0
        public new static List<Dolar> ObterPagamentos(IDadosVenda venda)
        {
            string cmd = "select dolar.*, pagamento.* from dolar "
            + " join pagamento on dolar.codigo=pagamento.codigo where "
            + " venda=" + DbTransformar(venda.Código);

            return Mapear<Dolar>(cmd);
        }
예제 #4
0
        public new static List<Dinheiro> ObterPagamentos(IDadosVenda venda)
        {
            string cmd = "select cobrarJuros, pagamento.codigo, descricao, cliente, valor, data, pendente, registradopor from dinheiro "
            + " join pagamento on dinheiro.codigo=pagamento.codigo where "
            + " venda=" + DbTransformar(venda.Código);

            return Mapear<Dinheiro>(cmd);
        }
예제 #5
0
 /// <summary>
 /// Constrói a lista de vendas mostrando um
 /// vetor de vendas.
 /// </summary>
 /// <param name="vendas">Vetor de vendas a ser exibido.</param>
 public ListarVendas(IDadosVenda[] vendas, VínculoVendaPessoa tipo)
     : this()
 {
     if (vendas.Length != 0)
     {
         switch (tipo)
         {
             case VínculoVendaPessoa.Cliente:
                 lblDescrição.Text = "Abaixo estão as compras de " + vendas[0].NomeCliente;
                 break;
             case VínculoVendaPessoa.Vendedor:
                 lblDescrição.Text = "Abaixo estão as vendas de " + Entidades.Pessoa.Pessoa.AbreviarNome(vendas[0].NomeVendedor);
                 break;
             default:
                 lblDescrição.Text = "Listagem das vendas";
                 break;
         }
         
         lista.TipoExibição = tipo;
         lista.Carregar(vendas);
     }
 }
예제 #6
0
        /// <summary>
        /// Quita uma venda no banco de dados.
        /// </summary>
        /// <param name="venda">Venda a ser quitada.</param>
        internal static void Quitar(IDadosVenda venda)
        {
            PermissãoFuncionário.AssegurarPermissão(Permissão.ManipularComissão);

            IDbConnection conexão = Conexão;

            lock (conexão)
            {
                Usuários.UsuárioAtual.GerenciadorConexões.RemoverConexão(conexão);

                try
                {
                    using (IDbCommand cmd = conexão.CreateCommand())
                    {
                        cmd.CommandText = string.Format(
                            "UPDATE venda SET quitacao = NOW() WHERE codigo = {0}",
                            DbTransformar(venda.Código));
                        cmd.ExecuteNonQuery();
                    }
                }
                finally
                {
                    Usuários.UsuárioAtual.GerenciadorConexões.AdicionarConexão(conexão);
                }
            }
        }
예제 #7
0
 /// <summary>
 /// Constrói a lista de vendas mostrando um
 /// vetor de vendas.
 /// </summary>
 /// <param name="controlador">
 /// Controlador da base inferior que será utilizada para
 /// exibir a base de visualização de vendas.
 /// </param>
 /// <param name="vendas">Vetor de vendas a ser exibido.</param>
 public ListarVendas(ControladorBaseInferior controlador, IDadosVenda[] vendas, VínculoVendaPessoa tipo)
     : this(vendas, tipo)
 {
     this.controlador = controlador;
     btnVisualizar.Visible = true;
 }
예제 #8
0
        public new static List<NotaPromissória> ObterPagamentos(IDadosVenda venda)
        {
            string cmd = "select cobrarJuros, pagamento.codigo, descricao, cliente, valor, data, pendente, registradopor, vencimento, prorrogadopara from notapromissoria "
            + " join pagamento on notapromissoria.codigo=pagamento.codigo where "
            + " venda=" + DbTransformar(venda.Código);

            return Mapear<NotaPromissória>(cmd);
        }
예제 #9
0
        public void Carregar(IDadosVenda[] vendas)
        {
            SuspendLayout();
            lista.SuspendLayout();
            Visible = false;

            lista.Items.Clear();
            hashCódigoItem.Clear();
            hashListViewItemVenda.Clear();

            if (vendas == null)
                return;

            double somatorioValor = AdicionarVendas(vendas);
            ContabilizarLegendas(vendas);

            InformaçõesStatus.Instância.QtdVendas = lista.Items.Count;
            InformaçõesStatus.Instância.ValorTotal = somatorioValor;

            AtualizarStatus();
            AtualizarTamanhoColunas();
            lista.Sort();
            lista.ShowGroups = btnAgruparLegenda.Checked = configuraçãoUsuárioAgruparLegenda.Valor;
            lista.ResumeLayout();

            Visible = true;
            ResumeLayout();
        }
예제 #10
0
        /// <summary>
        /// Um dos dois parametros precisa ser nulo!
        /// Ou recupera vendas de um cliente ou relacionadas a uma venda!
        /// </summary>
        private static Pagamento[] ObterPagamentos(Entidades.Pessoa.Pessoa cliente, IDadosVenda venda, bool somentePendente)
        {
            List<Pagamento> pagamentos = new List<Pagamento>();

            if (venda != null && venda.Código == 0)
                return pagamentos.ToArray();

            IDbConnection conexão;
            IDataReader leitor = null;

            conexão = Conexão;

            using (IDbCommand cmd = conexão.CreateCommand())
            {
                cmd.CommandText = "select p.*,d.*, c.*, pr.*, o.*, dl.* from pagamento p " + 
                                " left join dinheiro d on p.codigo=d.codigo " +
                                " left join cheque c on p.codigo=c.codigo " +
                                " left join notapromissoria pr on p.codigo=pr.codigo " +
                                " left join ouro o on p.codigo=o.codigo " +
                                " left join dolar dl on p.codigo=dl.codigo ";

                if (cliente != null && venda != null)
                    throw new InvalidOperationException();

                if (cliente != null)
                {
                    cmd.CommandText += " where cliente=" + DbTransformar(cliente.Código);

                    if (somentePendente)
                        cmd.CommandText += " AND pendente = 1 ";
                }

                if (venda != null)
                {
                    cmd.CommandText += " where venda=" + DbTransformar(venda.Código);
                }

                lock (conexão)
                {
                    try
                    {
                        using (leitor = cmd.ExecuteReader())
                        {

                            Pagamento entidade;

                            while (leitor.Read())
                            {
                                if (!leitor.IsDBNull(totalAtributos))
                                {
                                    entidade = new Dinheiro();
                                    entidade.PreencherAtributos(leitor, 0, totalAtributos);
                                }
                                else if (!leitor.IsDBNull(totalAtributos + Dinheiro.totalAtributos))
                                {
                                    entidade = new Cheque();
                                    entidade.PreencherAtributos(leitor, 0, totalAtributos + Dinheiro.totalAtributos);
                                }
                                else if (!leitor.IsDBNull(totalAtributos + Dinheiro.totalAtributos + Cheque.totalAtributos))
                                {
                                    entidade = new NotaPromissória();
                                    entidade.PreencherAtributos(leitor, 0, totalAtributos + Dinheiro.totalAtributos + Cheque.totalAtributos);
                                }
                                else if (!leitor.IsDBNull(totalAtributos + Dinheiro.totalAtributos + Cheque.totalAtributos + NotaPromissória.totalAtributos))
                                {
                                    entidade = new Ouro();
                                    entidade.PreencherAtributos(leitor, 0, totalAtributos + Dinheiro.totalAtributos + Cheque.totalAtributos + NotaPromissória.totalAtributos);
                                }
                                else
                                {
                                    entidade = new Dolar();
                                    entidade.PreencherAtributos(leitor, 0, totalAtributos + Dinheiro.totalAtributos + Cheque.totalAtributos + NotaPromissória.totalAtributos + Ouro.totalAtributos);
                                }

                                entidade.DefinirCadastrado();
                                pagamentos.Add(entidade);
                            }
                        }
                    }
                    finally
                    {
                        if (leitor != null)
                            leitor.Close();
                    }
                }
            }

            return pagamentos.ToArray();
        }
예제 #11
0
 /// <summary>
 /// Recupera todos os pagamentos associados a uma venda.
 /// </summary>
 public static Pagamento[] ObterPagamentos(IDadosVenda venda)
 {
     return ObterPagamentos(null, venda, false);
 }
예제 #12
0
        private ListViewItem CriarItem(IDadosVenda venda, out double valorTotal)
        {
            ListViewItem item = new ListViewItem(venda.Data.ToString("dd/MM/yyyy", Entidades.Configuração.DadosGlobais.Instância.Cultura));
            item.ImageIndex = (int)venda.Semáforo;
            item.Group = lista.Groups[ObterIndiceSemáforo(venda.Semáforo)];

            item.SubItems.AddRange(new string[] { "", "", "", "", "", "", "", "" });
            item.SubItems[colCódigo.Index].Text = venda.CódigoFormatado;
            item.SubItems[colControle.Index].Text = venda.Controle.HasValue ? venda.Controle.ToString() : "";

            if (lista.Columns.Contains(colVendedor) && (venda.NomeVendedor != null))
                item.SubItems[colVendedor.Index].Text = venda.NomeVendedor;

            if (lista.Columns.Contains(colCliente) && (venda.NomeCliente != null))
                item.SubItems[colCliente.Index].Text = venda.NomeCliente;

            valorTotal = venda.Valor;

            item.SubItems[colValor.Index].Text = valorTotal.ToString("C", Entidades.Configuração.DadosGlobais.Instância.Cultura);
            item.UseItemStyleForSubItems = true;

            return item;
        }
예제 #13
0
        private double AdicionarVendas(IDadosVenda[] vendas)
        {
            ListViewItem[] novosItens = new ListViewItem[vendas.Length];
            int x = 0;
            double valorTotalGlobal = 0;

            foreach (IDadosVenda venda in vendas)
            {
                double valorTotal;
                ListViewItem item = CriarItem(venda, out valorTotal);

                hashListViewItemVenda.Add(item, venda);
                hashCódigoItem.Add(venda.Código, item);

                foreach (ListViewItem.ListViewSubItem subitem in item.SubItems)
                    localizador.InserirFraseBuscável(subitem.Text, item);

                novosItens[x++] = item;
                valorTotalGlobal += valorTotal;
            }

            lista.Items.AddRange(novosItens);

            return valorTotalGlobal;
        }
예제 #14
0
        private void ContabilizarLegendas(IDadosVenda[] vendas)
        {
            int totalLegendas = Enum.GetValues(typeof(SemaforoEnum)).Cast<int>().Max() + 1;
            int[] legendas = new int[totalLegendas];

            foreach (IDadosVenda v in vendas)
                legendas[(int)v.Semáforo]++;

            LegendasContabilizadas?.Invoke(legendas);
        }
예제 #15
0
 /// <summary>
 /// Obtem o número de dias de juros cobrado
 /// caso o pagamento seja vinculado com a venda do parâmetro.
 /// </summary>
 /// <param name="venda"></param>
 /// <returns></returns>
 public int ObterDiasJuros(IDadosVenda venda)
 {
     if (CobrarJuros)
         return Preço.CalcularDias(Preço.SomarDias(venda.Data, (int)venda.DiasSemJuros), ÚltimoVencimento);
     else
         return 0;
 }
예제 #16
0
 public void Carregar(IDadosVenda venda)
 {
     Text = string.Format("Nota fiscal eletrônica da venda {0}", venda.CódigoFormatado);
     SaidaFiscalPdf nfe = SaidaFiscalPdf.Obter(venda.Código);
     Carregar(nfe.Pdf);
 }
예제 #17
0
 public double ObterValorLíquido(IDadosVenda venda)
 {
     if (CobrarJuros)
     {
         return Preço.Corrigir(ÚltimoVencimento.Date, Preço.SomarDias(venda.Data, (int)venda.DiasSemJuros),
             Valor, venda.TaxaJuros);
     }
     else
     {
         return Valor;
     }
 }
예제 #18
0
        public new static List<Ouro> ObterPagamentos(IDadosVenda venda)
        {
            string cmd = "select ouro.*, pagamento.* from ouro "
            + " join pagamento on ouro.codigo=pagamento.codigo where "
            + " venda=" + DbTransformar(venda.Código);

            return Mapear<Ouro>(cmd);
        }
예제 #19
0
        public new static List<Cheque> ObterPagamentos(IDadosVenda venda)
        {
            ArrayList lista = new ArrayList();
            string cmd = "select cheque.*, pagamento.* from cheque  "
            + " join pagamento on cheque.codigo=pagamento.codigo where "
            + " venda=" + DbTransformar(venda.Código);

            return Mapear<Cheque>(cmd);
        }