private void ExecutarExploracao(int sondaNumero) { Sondas sondas = new Sondas(bancoDeDados); Planalto planalto = new Planalto(); planalto.Criar(coordenada); movimentoSempreParaFrente = new MovimentoParaFrente(); var nomeDaSonda = $"Mark {sondaNumero}"; Sonda sonda = ObterSonda(sondas, nomeDaSonda); sonda.Explorar(planalto); sonda.IniciarEm(posicaoInicioalDaSonda, direcaoCardinalInicioalDaSonda); ExecutarInstrucaoDeMovimentoNaSonda(sonda, movimentoSempreParaFrente); sondas.Gravar(sonda); sondas = null; var direcao = sonda.DirecaoCardinalAtual.ToString().ToUpper().Substring(0, 1).Replace("O", "W").Replace("L", "E"); if (sondaNumero > 1) { resultado += "-"; } resultado += $"{sonda.PosicaoAtual.X} {sonda.PosicaoAtual.Y} {direcao}"; }
public void Iniciar() { var coordenada = new Coordenada(5, 5); planalto = new Planalto(); planalto.Criar(coordenada); movimentoSempreParaFrente = new MovimentoParaFrente(); conexaoComOBanco = new ConexaoComOBanco(); }
public void Iniciar() { especificacaoDeNegocio = new EspecificacaoDeNegocio(); corretorDaProximaPosicaoDoMovimento = new CorretorDaProximaPosicaoDoMovimento(); movimentoSempreParaFrente = new MovimentoParaFrente(corretorDaProximaPosicaoDoMovimento); var coordenada = new Coordenada(5, 5); var planalto = new Planalto(); planalto.Criar(coordenada); sonda = new Sonda(especificacaoDeNegocio, "Mark I"); sonda.Explorar(planalto); }
public void Iniciar() { var coordenada = new Coordenada(5, 5); planalto = new Planalto(); planalto.Criar(coordenada); movimentoSempreParaFrente = new MovimentoParaFrente(); sonda = new Sonda("Mark I"); sonda.Explorar(planalto); }
public void Iniciar() { especificacaoDeNegocio = new EspecificacaoDeNegocio(); corretorDaProximaPosicaoDoMovimento = new CorretorDaProximaPosicaoDoMovimento(); var coordenada = new Coordenada(5, 5); planalto = new Planalto(); planalto.Criar(coordenada); movimentoSempreParaFrente = new MovimentoParaFrente(corretorDaProximaPosicaoDoMovimento); conexaoComOBanco = new ConexaoComOBanco(); db = new ProvedorDeAcesso().Criar(conexaoComOBanco); }
/// <summary> /// Instancia este objeto, inicia as variáveis e carrega o registro pelo movimento /// </summary> /// <param name="movimento">Movimento relacionado</param> public AnaliseCreditoBase(IMovimento movimento) : this() { Movimento = movimento; DbContext.Populate(this, new Where { { "cad_AnaliseCredito.GUIDLanMov = @p1 ", new Parameter { ParameterName = "@p1", Value = movimento.GUID } } }); }
/// <summary> /// Cria uma Nota Fiscal Eletrônica de acordo com o movimento informado /// </summary> /// <param name="movimento">Movimento que será transformado em Nota Fiscal Eletrônica</param> /// <returns></returns> public static INF Create(IMovimento movimento) { if (movimento.IsNullOrEmpty()) return null; INF result = new Data.Faturamento.Lancamento.Movimento.NFe.NFe(); //Popula os dados do cabeçalho com o movimento informado result.DadoPessoa = movimento.DadoPessoa; result.DataHoraMovimento = movimento.DataHoraMovimento; result.DataEmissao = movimento.DataEmissao; result.ItensEspeciais = movimento.ItensEspeciais; result.TabelaPreco = movimento.TabelaPreco; result.CondicaoPagamento = movimento.CondicaoPagamento; result.Parcelas = movimento.Parcelas; //Popula os itens com os itens do movimento result.Itens = new List<Model.Faturamento.Lancamento.Movimento.Item.IItem>(); foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in movimento.Itens) { result.Itens.Add(new Data.Faturamento.Lancamento.Movimento.Item.NFe.Item() { EGUID = item.EGUID, ItemMovimentado = item.ItemMovimentado, DescricaoNF = item.DescricaoNF, CFOP = item.CFOP, Conferido = item.Conferido, ItensEspeciais = item.ItensEspeciais, Ordem = item.Ordem, Quantidade = item.Quantidade, QuantidadeConferida = item.QuantidadeConferida, Unidade = item.Unidade, ValorDescontoAcrescimo = item.ValorDescontoAcrescimo, ValorUnitarioBruto = item.ValorUnitarioBruto, Vendedor = item.Vendedor, PercentualImpostoAproximadoFederal = item.PercentualImpostoAproximadoFederal, PercentualImpostoAproximadoImport = item.PercentualImpostoAproximadoImport, PercentualImpostoAproximadoEstadual = item.PercentualImpostoAproximadoEstadual, PercentualImpostoAproximadoMunicipal = item.PercentualImpostoAproximadoMunicipal, TabelaPreco = item.TabelaPreco }); } return result; }
public CalculoItemEspecial(IMovimento movimento) { _itensEspeciais = new List<IEspecialBase>(); foreach (IItem item in movimento.Itens) { if (item.ItensEspeciais == null) continue; foreach (IEspecial itemE in item.ItensEspeciais) { _itensEspeciais.Add(itemE.Clone() as IEspecial); } } foreach (IEspecial item in movimento.ItensEspeciais) { _itensEspeciais.Add(item.Clone() as IEspecial); } Itens = movimento.Itens; Refresh(); }
/// <summary> /// Cria um novo item e retorna de acordo com o tipo identificado e carrega o mesmo pelo GUID /// </summary> /// <param name="guid">GUID de identificação do item</param> /// <param name="movimento">Movimento pai para validar o tipo de item</param> /// <returns></returns> public static ItemBase Create(IMovimento movimento, GUID guid) { ItemBase result = null; if (movimento is Model.Faturamento.Lancamento.Movimento.PreVenda.IPreVenda) result = new Data.Faturamento.Lancamento.Movimento.Item.PreVenda.Item(guid); else if (movimento is Model.Faturamento.Lancamento.Movimento.DAV.OS.IDAV) result = new Data.Faturamento.Lancamento.Movimento.Item.DAV.OS.Item(guid); else if (movimento is Model.Faturamento.Lancamento.Movimento.DAV.IDAV) result = new Data.Faturamento.Lancamento.Movimento.Item.DAV.Item(guid); else if (movimento is Model.Faturamento.Lancamento.Movimento.NFe.INFe) result = new Data.Faturamento.Lancamento.Movimento.Item.NFe.Item(guid); else if (movimento is Model.Faturamento.Lancamento.Movimento.NFManual.INFManual) result = new Data.Faturamento.Lancamento.Movimento.Item.NFManual.Item(guid); else if (movimento is Model.Faturamento.Lancamento.Movimento.Devolucao.IDevolucao) result = new Data.Faturamento.Lancamento.Movimento.Item.Devolucao.Item(guid); else if (movimento is Model.Faturamento.Lancamento.Movimento.Conferencia.IConferencia) result = new Data.Faturamento.Lancamento.Movimento.Item.Conferencia.Item(); return result; }
private void ExecutarInstrucaoDeMovimentoNaSonda(Sonda sonda, IMovimento movimentoSempreParaFrente) { for (int contador = 0; contador < serieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto.Length; contador++) { var instrucao = serieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto[contador]; switch (instrucao) { case "L": sonda.Vire(Direcao.Esqueda); break; case "R": sonda.Vire(Direcao.Direita); break; case "M": sonda.Move(movimentoSempreParaFrente); break; } } }
/// <summary> /// Método utilizado para preencher esta instância com os dados do dataReader /// </summary> /// <param name="dataReader">DataReader com os dados que deverão ser passados para esta instância</param> public override void Populate(DataReader dataReader) { #region base base.Populate(dataReader); #endregion #region desta classe Voucher = MovimentoBase.Create(dataReader.GetValue<string>("p_GUIDLanMovVoucher"), false) as IMovimento; MotivoDevolucao = dataReader.GetValue<string>("p_Motivo"); #endregion }
public static AnaliseCreditoResult Analisar(IMovimento movimento) { AnaliseCreditoResult result = new AnaliseCreditoResult(); //------------------------------------------------------------------------- // Buscar todos os movimentos em abertos que existem para este cliente //------------------------------------------------------------------------- Connection connection = null; ICliente cliente = movimento.DadoPessoa.Cliente as ICliente; if (movimento.New) { if (cliente != null) { IOcorrencia ocorrencia = null; IList<IOcorrencia> ocorrencias = cliente.Ocorrencias.Where(k => k.TipoOcorrencia == Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito).ToList(); try { if (cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.Bloqueado) { ocorrencia = new Ocorrencia(); ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito; ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Bloqueio; ocorrencia.Descricao = "Análise de Crédito - Cliente com restrição - Faturamento: " + movimento.EGUID.ToString(); ocorrencia.Data = DateTime.Now; cliente.Ocorrencias.Add(ocorrencia); cliente.Save(); return new AnaliseCreditoResult { Status = Enuns.Financeiro.StatusAnaliseResult.Bloqueado, }; } double total = movimento.ValorTotalLiquido; if (movimento is IVendaCF) { IVendaCF cf = movimento as IVendaCF; IList<IBaixaForma> bxs = cf.Baixa.Formas.Where(i => (i.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Parcelado || i.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.CreditoConsumidor || i.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Cheque)).ToList(); if (bxs.Count > 0) total = bxs.Sum(i => i.ValorLiquido); else { result.Status = Enuns.Financeiro.StatusAnaliseResult.Aprovado; return result; } } double limite = cliente.ValorLimiteCredto - cliente.ValorDocumentoAberto; double risco = cliente.PercentualRisco > 0 ? (cliente.ValorLimiteCredto * ((cliente.PercentualRisco / 100))) : 0; if (limite > total) { if (cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.AAutorizar) { ocorrencia = new Ocorrencia(); ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito; ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Nenhuma; ocorrencia.Descricao = "Análise de Crédito - Cliente a autorizar - Faturamento: " + movimento.EGUID.ToString(); ocorrencia.Data = DateTime.Now; result.Status = Enuns.Financeiro.StatusAnaliseResult.AguardarAnalise; } else if (cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.ComRestricao || cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.SemCredito) { ocorrencia = new Ocorrencia(); ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito; ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Bloqueio; ocorrencia.Descricao = "Análise de Crédito - Cliente permitido faturamento somente a vista"; ocorrencia.Data = DateTime.Now; result.Status = Enuns.Financeiro.StatusAnaliseResult.AprovadoSomenteAVista; } else { result.Status = Enuns.Financeiro.StatusAnaliseResult.Aprovado; } } else { if ((limite + risco) > total) { result.Status = Enuns.Financeiro.StatusAnaliseResult.AprovadoComRisco; } else { result.Status = Enuns.Financeiro.StatusAnaliseResult.AguardarAnalise; ocorrencia = new Ocorrencia(); ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito; ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Nenhuma; ocorrencia.Descricao = "Análise de Crédito - Cliente a autorizar - Faturamento: " + movimento.EGUID.ToString(); ocorrencia.Data = DateTime.Now; } } if (ocorrencia != null) cliente.Ocorrencias.Add(ocorrencia); cliente.Save(); } finally { if (connection != null) connection.Close(); } } else { result.Status = Enuns.Financeiro.StatusAnaliseResult.ClienteNaoIdentificado; } } return result; }
public ContaCorrenteController(IMovimento movimento, ILogger <ContaCorrenteController> logger) { _logger = logger; _movimento = movimento; }
/// <summary> /// Método para impressão dos pagamentos no cupom fiscal e atualização na bobina /// </summary> /// <param name="venda">Instancia da venda </param> /// <param name="totalDinheiro">Total do pagamento </param> /// <param name="forma">Forma de pagamento com os dados da impressora como índice, etc. /// Observação: se não for informado nenhuma forma é utilizado a forma de pagamento DINHEIRO /// </param> public void ImprimePagamento(IMovimento venda, double totalDinheiro, IFormaPagamento forma = null) { string line = string.Empty; double troco = Math.Round(venda.Baixa.Formas.Where(k => k.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Dinheiro || k.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Voucher) .Sum(k => k.ValorLiquido) - venda.ValorTotalLiquido, 2); double totalVenda = Math.Round(venda.ValorTotalLiquido, 2); if (StatusImpressao != BobinaStatusImpressao.Subtotaliza) return; if (forma == null) line = "DINHEIRO R${0}{1:N2}"; else { switch (forma.TipoForma) { case Enuns.Cadastro.TipoForma.CartaoCredito: case Enuns.Cadastro.TipoForma.CartaoDebito: case Enuns.Cadastro.TipoForma.CartaoPrivateLabel: line = "CARTÃO R${0}{1:N2}"; break; case Enuns.Cadastro.TipoForma.Cheque: line = "CHEQUE R${0}{1:N2}"; break; case Enuns.Cadastro.TipoForma.ConfirmacaoPreAutorizacao: case Enuns.Cadastro.TipoForma.CreditoConsumidor: line = "CDC R${0}{1:N2}"; break; case Enuns.Cadastro.TipoForma.Dinheiro: line = "DINHEIRO R${0}{1:N2}"; break; case Enuns.Cadastro.TipoForma.Voucher: line = "VOUCHER R${0}{1:N2}"; break; case Enuns.Cadastro.TipoForma.Parcelado: line = "PARCELADO R${0}{1:N2}"; break; } } if (troco > 0 && !ImpressoTroco) { WriteLine(line, "".PadLeft(MaxLengthLine - 14 - totalDinheiro.ToString().Length), totalDinheiro); line = "TROCO R${0}{1:N2}"; WriteLine(line, "".PadLeft(MaxLengthLine - 11 - troco.ToString().Length), troco); ImpressoTroco = true; } else { WriteLine(line, "".PadLeft(MaxLengthLine - 14 - totalDinheiro.ToString().Length), totalDinheiro); } StatusImpressao = BobinaStatusImpressao.FormaPagamento; }
public void Move(IMovimento movimento) { PosicaoAtual = movimento.Executar(DirecaoAtual, PosicaoAtual); }
/// <summary> /// Carrega o movimento selecionado pelo usuário /// </summary> /// <param name="eguid">Código do movimento</param> private void CarregarMovimento(EGUID eguid) { IList<IMovimento> movimentos = new List<IMovimento>(); if (!string.IsNullOrEmpty(eguid)) { if (rbtDAV.Checked) { movimentos = new DAV().Find<IDAV>(new Where { { "fat_LanMovDav.EGUID", eguid} }).ToList<IMovimento>(); } else if (rbtPreVenda.Checked) { movimentos = new PreVenda().Find<IPreVenda>(new Where { { "fat_LanMovPv.EGUID", eguid } }).ToList<IMovimento>(); } else { movimentos = new Data.Faturamento.Lancamento.Movimento.DAV.OS.DAV().Find<Model.Faturamento.Lancamento.Movimento.DAV.OS.IDAV>(new Where { { "fat_LanMovDavOs.EGUID", eguid } }).ToList<IMovimento>(); } /* * Se não encontrou movimento na base do OpenPOS, vamos procurar na base da retaguarda */ if (movimentos.Count == 0) { Movimento = GetFromBackend().FirstOrDefault(); movimentos.Add(Movimento); } CarregarMovimento(movimentos.FirstOrDefault()); } }
/// <summary> /// Cria um novo item e retorna de acordo com o tipo identificado /// </summary> /// <param name="movimento">Movimento pai para validar o tipo de item</param> /// <returns></returns> public static ItemBase Create(IMovimento movimento) { ItemBase result = null; if (movimento is Model.Faturamento.Lancamento.Movimento.PreVenda.IPreVenda) result = new Data.Faturamento.Lancamento.Movimento.Item.PreVenda.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.DAV.OS.IDAV) result = new Data.Faturamento.Lancamento.Movimento.Item.DAV.OS.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.DAV.IDAV) result = new Data.Faturamento.Lancamento.Movimento.Item.DAV.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.VendaCF.IVendaCF) result = new Data.Faturamento.Lancamento.Movimento.Item.VendaCF.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.Devolucao.IDevolucao) result = new Data.Faturamento.Lancamento.Movimento.Item.Devolucao.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.NFe.INFe) result = new Data.Faturamento.Lancamento.Movimento.Item.NFe.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.NFCe.INFCe) result = new Data.Faturamento.Lancamento.Movimento.Item.NFCe.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.NFManual.INFManual) result = new Data.Faturamento.Lancamento.Movimento.Item.NFManual.Item(); else if (movimento is Model.Faturamento.Lancamento.Movimento.Conferencia.IConferencia) result = new Data.Faturamento.Lancamento.Movimento.Item.Conferencia.Item(); if (result != null) result.Parent = movimento; return result; }
/// <summary> /// Subtotaliza o cupom fiscal /// </summary> /// <param name="venda">Instancia corrente da venda </param> public void SubTotaliza(IMovimento venda) { double totalVenda = Math.Round(venda.ValorTotalLiquido, 2); string line = string.Empty; double totalDescontoItem = 0.0; double totalAcrescimoItem = 0.0; double totalDescontoAcresc = 0.0; if (Unimake.Convert.ToBoolean(Settings.Setting.EmissaoConsumidorFinalNFCe) && (StatusImpressao == BobinaStatusImpressao.Subtotaliza || StatusImpressao == BobinaStatusImpressao.FormaPagamento)) return; //Se possuir desconto ou acréscimo temos que subtotalizá-lo if (venda.ValorTotalAcrescimo > 0 || venda.ValorTotalDesconto > 0) { //Separar o valor dos descontos dos acréscimos foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in venda.Itens) { if (venda.ValorTotalDesconto > 0) totalDescontoItem += item.ValorTotalDesconto * item.Quantidade; else if (venda.ValorTotalAcrescimo > 0) totalAcrescimoItem += item.ValorTotalAcrescimo * item.Quantidade; } //Cálculo para determinar se irá ser aplicado o desconto ou acréscimo no subtotal totalDescontoAcresc = (venda.ValorTotalAcrescimo - totalAcrescimoItem) - (venda.ValorTotalDesconto - totalDescontoItem); line = "SUBTOTAL R${0}{1:N2}"; WriteLine(line, "".PadLeft((MaxLengthLine - 18 - totalVenda.ToString().Length)), totalDescontoAcresc); if (totalDescontoAcresc > 0) { line = "(+) ACRESCIMO R${0}{1:N2}"; WriteLine(line, "".PadLeft((MaxLengthLine - 18 - totalVenda.ToString().Length)), totalDescontoAcresc); } else if (totalDescontoAcresc < 0) { line = "(-) DESCONTO R${0}{1:N2}"; WriteLine(line, "".PadLeft((MaxLengthLine - 18 - totalVenda.ToString().Length)), totalDescontoAcresc); } } line = "TOTAL R${0}{1:N2}"; WriteLine(line, "".PadLeft(MaxLengthLine - 11 - totalVenda.ToString().Length), totalVenda - totalDescontoAcresc); StatusImpressao = BobinaStatusImpressao.Subtotaliza; }
private void CarregarMovimento(IMovimento movimento) { if (movimento.IsNullOrEmpty()) { MessageBox.Show("Não foi possível localizar o movimento informado"); grdProdutos.Clear(); return; } if (movimento.Status != Enuns.Faturamento.Lancamento.Status.Aberto) { MessageBox.Show("Não é possível fazer a impressão desse movimento, pois a sua situação é: " + movimento.Status.GetDescription()); return; } Movimento = movimento; // Completar o campo txt com Eguid txtCodigo.Text = Movimento.EGUID; txtCodBarra.Focus(); //Limpa as linhas da grid antes de adicionar grdProdutos.Clear(); //Popula os produtos do movimento selecionado foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem itemMov in Movimento.Itens) { Model.Cadastro.Item.Produto.IProduto produto = itemMov.ItemMovimentado as Model.Cadastro.Item.Produto.IProduto; grdProdutos.Rows.Add(new object[] { itemMov.GUID.ToString(), itemMov.ItemMovimentado.EGUID.ToString(), itemMov.ItemMovimentado.Descricao, produto.IsNullOrEmpty() ? "" : produto.CodigosBarras.FirstOrDefault().Codigo, Unimake.Convert.ToDouble(itemMov.Quantidade), 0, false, itemMov.ItemMovimentado }); } }
public void Move(IMovimento movimento) { PosicaoAtual = movimento.Executar(this); }