/// <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 override void AfterSave(bool updating) { base.AfterSave(updating); if (updating) Connection.ExecuteNonQuery("DELETE FROM fat_LanMovNFInfAdic WHERE GUIDLanMovNF = @p1;", new Parameter[]{ new Parameter { ParameterName = "@p1", Value = GUID.ToString() }}); foreach (IInfAdic inf in InformacoesAdicionais) { inf.Parent = this; inf.Save(); } Eventos.Save<IEvento, INF>(this, () => { if (updating) { Connection.ExecuteNonQuery("DELETE FROM fat_LanMovNFEventos WHERE GUIDLanMovNF = @p1", new Parameter[]{ new Parameter { ParameterName = "@p1", Value = GUID.ToString() }}); } }); #region Movimentos vinculados foreach (IMovimento movimentoVinculado in MovimentosVinculados) { Model.Faturamento.Lancamento.ILanSK sk = new Data.Faturamento.Lancamento.LanSK(); sk.GUIDSK = this.GUID; sk.Pai = this.GUID; sk.Filho = movimentoVinculado.GUID; sk.TableHash = this.GetTableHash(); sk.Save(); this.Connection.ExecuteNonQuery("UPDATE fat_Lan SET Status = @status WHERE GUID = @guid", new[] { new Parameter{ ParameterName = "@status", GenericDbType= GenericDbType.Integer, Value = (int)Enuns.Faturamento.Lancamento.Status.Impresso }, new Parameter{ ParameterName = "@guid", Value = movimentoVinculado.GUID } }); } #endregion }
/// <summary> /// Ocorrea antes de excluir uma devolução da base de dados /// </summary> public override void BeforeDelete() { base.BeforeDelete(); ILanSK sk = new LanSK(this.GUID, this.GetTableHash()); //Se essa devolução já foi utilizada como voucher, não podemos excluí-la if (!sk.Filho.IsNullOrEmpty()) throw new DevolucaoJaUtilizada(); }
public override void AfterSave(bool updating) { base.AfterSave(updating); if (this is Voucher) { Voucher v = this as Voucher; IList<Devolucao> dev = DbContext.Find(new Devolucao(), new Where() { {"fat_LanMov.EGUID",v.NumeroVoucher }, }); Devolucao devolucao = dev.Count > 0 ? dev[0] as Devolucao : null; if (!devolucao.IsNullOrEmpty()) { // salva o vinculo na lanSK ILanSK sk = new LanSK(); sk.GUIDSK = devolucao.GUID; sk.Pai = devolucao.GUID; sk.Filho = GUID; sk.TableHash = devolucao.GetTableHash(); sk.Save(); //Determina que o valor do voucher já foi pago ao cliente Connection.ExecuteNonQuery(@"UPDATE fat_lan SET status = @status WHERE guid = @guid;", new Parameter[] { new Parameter { ParameterName = "@status", Value = (int)Enuns.Faturamento.Lancamento.Status.VoucherRecebido }, new Parameter { ParameterName = "@guid", Value = devolucao.GUID.ToString() } }); } } }
public override void AfterSave(bool updating) { base.AfterSave(updating); #region movimento vinculado if (updating) { foreach (IMovimento movimentoVinculado in MovimentosVinculados) { ILanSK sk = new LanSK(); sk.GUIDSK = this.GUID; sk.Pai = this.GUID; sk.Filho = movimentoVinculado.GUID; sk.TableHash = this.GetTableHash(); sk.Save(); this.Connection.ExecuteNonQuery("UPDATE fat_Lan SET Status = @status WHERE GUID = @guid", new[] { new Parameter{ ParameterName = "@status", GenericDbType= GenericDbType.Integer, Value = (int)Enuns.Faturamento.Lancamento.Status.ImpressoCupom }, new Parameter{ ParameterName = "@guid", Value = movimentoVinculado.GUID } }); } } #endregion #region Registro 04 /*TODO: Conforme ir fazendo os ajustes na Venda de Cupom fiscal será necessários informar os valroes corretos para os registros 04 e 05; * Ajustes no Registro 04: * CCF, COO, ValorSubtotal, ValorDescontoSubtotal, TipoDescontoSubtotal, ValorAcrescimoSubtotal, TipoAcrescimoSubtotal, Cancelado * ValorCancelamentoAcrescimoSubtotal, OrdemDescontoAcrescimo * Ajustes no Registro 05: * COO, CCF, CodigoTotalalizadorParcial, Cancelado, QuantidadeCancelada, ValorCancelado, ValorCancelamentoAcrescimo,QuantidadeCasaDecimal * QuantidadeCasaDecimalVlrUnit */ IRegistro04 reg04 = new Registro04(); //Gravar os dados da venda de cupom fiscal no registro 04 //------------------------------------------------------------------------- // Procurar a impressora pelo PDV //------------------------------------------------------------------------- IList<IImpressora> impressoras = new Impressora().Find<IImpressora>(new Where { {"ecf_Impressora.GUIDPDV = @p1", new Parameter{ ParameterName = "@p1", Value = AbreFechaCaixa.Caixa.PDV.GUID }} }); if (impressoras.Count > 0 && !updating) { IImpressora ecfAtual = impressoras[0]; reg04.Movimento = this; reg04.MFAdicional = ecfAtual.MFAdicional; reg04.ModeloECF = Unimake.Convert.ToString(ecfAtual.ModeloACBR); reg04.NumeroUsuario = Unimake.Convert.ToInt(ecfAtual.NumeroUsuario); reg04.CCF = this.CCF; reg04.COO = this.COO; reg04.DataEmissao = this.DataEmissao; reg04.ValorSubtotal = this.ValorTotalBruto; reg04.ValorDescontoSubtotal = 0; reg04.TipoDescontoSubtotal = IndicadorTipo.Monetario; reg04.ValorAcrescimoSubtotal = 0; reg04.TipoAcrescimoSubtotal = IndicadorTipo.Monetario; reg04.ValorTotalLiquido = this.ValorTotalLiquido; reg04.Cancelado = IndicadorCancelamento.Nao; reg04.ValorCancelamentoAcrescimoSubtotal = 0; reg04.OrdemDescontoAcrescimo = IndicadorOrdem.Desconto; reg04.NumeroFabricacao = ecfAtual.Serie; if (DadoPessoa != null) { reg04.NomeAdquirente = this.DadoPessoa.NomeFantasia.Substring(0, 40); if (this.DadoPessoa.Cliente.FisicaJuridica == Enuns.Cadastro.Pessoa.FisicaJuridica.Fisica) reg04.CPFCNPJAdquirente = Unimake.Utilities.OnlyNumbers(this.DadoPessoa.Cliente.Fisica.CPF.ToString(), "./-").ToString(); else reg04.CPFCNPJAdquirente = Unimake.Utilities.OnlyNumbers(this.DadoPessoa.Cliente.Juridica.CNPJ.ToString(), "./-").ToString(); } int numeroItemECF = 0; foreach (IItem item in this.Itens) { numeroItemECF += 1; //Gravar os dados dos itens do cupom fiscal no registro 05 IRegistro05 reg05 = new Registro05(); reg05.ItemMovimentado = item; reg05.NumeroFabricacao = ecfAtual.Identificacao; reg05.MFAdicional = ecfAtual.MFAdicional; reg05.ModeloECF = Unimake.Convert.ToString(ecfAtual.ModeloACBR); reg05.NumeroUsuario = reg04.NumeroUsuario; reg05.COO = reg04.COO; reg05.CCF = reg04.CCF; reg05.NumeroItem = numeroItemECF; reg05.CodigoTotalalizadorParcial = "I01"; reg05.SituacaoTributaria = item.SituacaoTributaria; if (Unimake.Convert.ToEnum<Enuns.Faturamento.Lancamento.Movimento.Item.Status>(item.Status) == Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado) { reg05.Cancelado = "S"; reg05.QuantidadeCancelada = item.Quantidade; reg05.ValorCancelado = item.ValorTotalBruto; } else { reg05.Cancelado = "N"; reg05.QuantidadeCancelada = 0; reg05.ValorCancelado = 0; } Model.Cadastro.Item.Produto.IProduto produto = item.ItemMovimentado as Model.Cadastro.Item.Produto.IProduto; reg05.ValorCancelamentoAcrescimo = 0; reg05.IndicadorTruncamento = produto.IndicadorTruncamento; reg05.IndicadorProducao = produto.IndicadorProducao; reg05.QuantidadeCasaDecimal = 2; reg05.QuantidadeCasaDecimalVlrUnit = 2; reg05.NumeroFabricacao = reg04.NumeroFabricacao; reg04.Registros05.Add(reg05); reg04.Save(); } } #endregion }
/// <summary> /// Método para vincular DAVOS com outro DAVOS /// </summary> /// <param name="dav">objeto do tipo DAV-OS</param> public IDAV VinculaDAVOS() { if(IsVinculado) throw new OpenPOS.Exceptions.Faturamento.Lancamento.Movimento.MovimentoIsReadOnly(); IDAV dav = new OpenPOS.Data.Faturamento.Lancamento.Movimento.DAV.OS.DAV(GUID); // Atualiza o objeto dav para a cópia this.New = true; this.GUID = GUID.Create(); // Adiciona os vinculos foreach(IItem item in this.Itens) { IItem itemPai = dav.Itens.Contains(item) ? dav.Itens.First(i => i.GUID.Equals(item.GUID)) : null; if(itemPai != null) itemPai.ItensParent.Add(item); } ((List<IItem>)Itens).ForEach(k => k.New = true); // salva o vinculo na lanSK ILanSK sk = new LanSK(); sk.GUIDSK = dav.GUID; sk.Pai = dav.GUID; sk.Filho = GUID; sk.TableHash = dav.GetTableHash(); foreach(IItem item in dav.Itens) foreach(Model.Faturamento.Lancamento.Movimento.Item.IItem p in Itens) if(item.ItensParent.Contains(p)) sk.SKItens.Add(new LanSKItem() { ItemPai = item.GUID, ItemFilho = p.GUID, SKPai = dav.GUID, SKFilho = GUID, TableHash = item.GetTableHash() }); sk.Save(); dav.IsVinculado = true; dav.Save(); return this; }
public override void AfterSave(bool updating) { base.AfterSave(updating); GUID[] guidItens = (from x in Itens select x.GUID).ToArray(); //------------------------------------------------------------------------- // Aqui iremos excluir todos os: // -> itens; // -> rateios; //------------------------------------------------------------------------- if(guidItens.Count() > 0) { Connection.ExecuteNonQuery(String.Format(@" DELETE FROM fat_LanMovItem WHERE Rateio = 0 AND GUID NOT IN ({0}) AND GUIDLanMov = '{1}'; DELETE FROM fat_LanMovItem WHERE Rateio = 1 AND GUIDLanMov = '{1}';", guidItens.Join(), GUID)); } #region Dados pessoa DadoPessoa.Parent = this; DadoPessoa.Save(); #endregion #region itens foreach(IItem item in Itens) { item.Parent = this; // Irá calcular os tributos neste momento apenas se for diferente de cupom fiscal if(!(this is IVendaCF)) CalculaTributo(item); CalculaImpostosAproximados(item); item.Save(); } #endregion #region Movimentos parent foreach(IMovimento movimento in MovimentosMesclados) { ILanSK sk = new LanSK(); sk.GUIDSK = this.GUID; sk.Pai = this.GUID; sk.Filho = movimento.GUID; sk.TableHash = Unimake.Convert.ToInt(this.GetTableHash()); foreach(IItem item in ((IMovimento)this).Itens) { foreach(Model.Faturamento.Lancamento.Movimento.Item.IItem p in item.ItensParent) { if(p.Parent.GUID.Equals(movimento.GUID)) sk.SKItens.Add(new LanSKItem() { ItemPai = item.GUID, ItemFilho = p.GUID, SKPai = this.GUID, SKFilho = p.Parent.GUID, TableHash = item.GetTableHash() }); } } sk.Save(); //Vamos mesclar um DAV somente quando possuir mais de dois ou mais DAV´s selecionados if(MovimentosMesclados.Count > 1) { //TODO André: Atualizar o Status do DAV para mesclado. Por enquanto só está mesclando o DAV, que por sua vez está sendo chamado do formulário FormMesclarCarregarDAV. //Quando for mesclar uma Pré-Venda é necessário fazer os tratamentos corretos Connection.ExecuteNonQuery("UPDATE fat_Lan SET Status = @p1 WHERE GUID = @p2;", new[] { new Parameter { ParameterName = "@p1", GenericDbType = GenericDbType.Integer, Value = (int)Enuns.Faturamento.Lancamento.Status.Mesclado }, new Parameter { ParameterName = "@p2", GenericDbType = GenericDbType.String, Value = movimento.GUID } }); } } #endregion #region Rateios IList<IRateio> rateios = Rateio.GerarRateio(this); foreach(IRateio rateio in rateios) { rateio.Parent = this; rateio.Save(); } #endregion #region Parcelas //------------------------------------------------------------------------- // Se não possuir parcelas geradas, deverão ser geradas as parcelas. // Se já existir salvar as parcelas que foram informadas //------------------------------------------------------------------------- if(Parcelas == null || Parcelas.Count == 0 && !Temp) { //TODO André: Ver com a equipe a cerca da condição de pagamento na Pré-Venda/DAV e Cupom Fiscal //Na Pré-Venda é obrigatório informar uma condição de pagamento que por sua vez irá gerar parcelas, isso se e somente se a condição de pagamento estiver parcelas cadastradas //No cupom fiscal na forma de pagamento a dinheiro não geramos parcelas, porem temos a seguinte situação, como o componente "FormaPagamento", já traz uma condição de pagamento //devido ser um componente "SearchField" que por sua vez já é populado automaticamente quando temos um registro. Vamos deixar dessa forma? Pois quando o cliente paga com dinheiro //esta gerando parcelas. Podemos fazer um tratamento para gerar parcelas somente quando é "Parcelado". Analisar!!! if(CondicaoPagamento != null && GUID.IsValid(CondicaoPagamento.GUID)) { Parcelas = (from x in CondicaoPagamento.GerarParcelas(ValorTotalLiquido, DataEmissao) let parcela = Data.Abstract.Financeiro.Lancamento.PagarReceberBase.Create(this, x) select parcela).ToList<Model.Financeiro.Lancamento.IParcela>(); } } if(updating) { GUID[] guidParcelas = (from x in Parcelas group x by x.GUID into g select g.Key).ToArray(); if(guidParcelas.Length > 0) { //Apagar todas as parcelas desse movimento e apagar o lançamento de conta a pagar. Pois os mesmos serão gerados novamente logo abaixo Connection.ExecuteNonQuery(String.Format(@" DELETE FROM fat_LanSK WHERE GUIDLanPai = @pai AND TableHash = @th; DELETE FROM fat_Lan WHERE GUID IN (SELECT GUIDLanFilho FROM fat_LanSK WHERE GUIDLanPai = @pai AND GUIDLanFilho NOT IN ({0}) AND TableHash = @th);", guidParcelas.Join()), new[] { new Parameter { ParameterName = "@pai", Value = GUID }, new Parameter{ ParameterName = "@th", Value = Unimake.Utilities.GetTableHash(typeof(IPagarReceber)) } } ); } } foreach(var parcela in Parcelas) { parcela.ContaCorrente = DadoPessoa.Cliente.ContaCorrente; parcela.Connection = Connection; GUID guidParcela = parcela.Save(); LanSK lanSK = new LanSK(GUID, guidParcela, Utilities.GetTableHash(typeof(IPagarReceber))); lanSK.Connection = Connection; lanSK.Save(); } #endregion #region Ocorrências Connection.ExecuteNonQuery(@"DELETE FROM fat_LanMovOcorrencia WHERE GUIDLanMov = @guid;", new[] { new Parameter { ParameterName = "@guid", Value = GUID } }); foreach (Model.Faturamento.Lancamento.Movimento.Ocorrencia.IOcorrencia ocorrencia in Ocorrencias) { ocorrencia.Parent = this; ocorrencia.Save(); } #endregion #region Baixas if (Baixa != null) { Baixa.Parent = this; Baixa.Save(); } #endregion }