protected internal override void OnInitialize() { CallCreate(ACBrECFInterop.ECF_Create); Device = new ACBrDevice(this); this.InfoRodapeCupom = new Rodape(this); this.ConfigBarras = new ConfigBarras(this); this.Consumidor = new Consumidor(this); this.DadosReducaoZClass = new DadosReducaoZClass(this); }
/// <summary> /// Cancela as Pré Vendas pendentes /// </summary> private void CancelaPreVendasPendentes() { try { //Verifica se tem pre vendas pendentes DateTime dataMov = DateTime.Today; #region Antes da emissão da redução Z if (DadosReducaoZ.DataDoMovimento.CompareTo(dataMov) > 2) dataMov = dataMov.AddDays(DadosReducaoZ.DataDoMovimento.CompareTo(dataMov) - 1); else if (DadosReducaoZ.DataDoMovimento.CompareTo(dataMov) != 1) dataMov = DadosReducaoZ.DataDoMovimento.AddDays(-1); IList<IPreVenda> preVendas = new PreVenda().Find<IPreVenda>(new Where() { { "fat_LanMov.DataHoraMovimento < @p1", new Parameter { GenericDbType = GenericDbType.DateTime, ParameterName = "@p1", Value = dataMov } }, { "fat_Lan.Status = @p2", new Parameter { GenericDbType = GenericDbType.Integer, ParameterName = "@p2", Value = (int)Enuns.Faturamento.Lancamento.Status.Aberto } } }); //Cancela se houver pre vendas pendentes foreach (IPreVenda pv in preVendas) { Model.Faturamento.Lancamento.Movimento.VendaCF.IVendaCF venda = new VendaCF(); venda.DadoPessoa = pv.DadoPessoa; venda.Emitente = pv.Emitente; int contaPV = 0; foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in pv.Itens) if (((Model.Faturamento.Lancamento.Movimento.Item.PreVenda.IItem)item).Status == Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado) contaPV++; if (contaPV != pv.Itens.Count) { ACBrECF.AbreCupom(venda.DadoPessoa.Cliente.GetCPFCNPJ(), venda.DadoPessoa.NomeFantasia, ""); foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in pv.Itens) if (((Model.Faturamento.Lancamento.Movimento.Item.PreVenda.IItem)item).Status != Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado) { Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem i = new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.VendaCF.Item(); i.DescricaoNF = item.DescricaoNF; i.ItemMovimentado = item.ItemMovimentado; i.Quantidade = item.Quantidade; i.ValorUnitarioBruto = item.ValorUnitarioBruto; i.Vendedor = item.Vendedor; i.Status = Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado; i.SituacaoTributaria = SituacaoTributaria.Isento; i.ItensParent.Add(item); (i.ItemMovimentado as Model.Cadastro.Item.Produto.IProduto).IndicadorProducao = "P"; (i.ItemMovimentado as Model.Cadastro.Item.Produto.IProduto).IndicadorTruncamento = "T"; ((Model.Faturamento.Lancamento.Movimento.Item.PreVenda.IItem)item).Status = Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado; item.Save(); venda.Itens.Add(i); ACBrECF.VendeItem(i.Ordem.ToString(), i.DescricaoNF, "FF", (decimal)i.Quantidade, (decimal)i.ValorUnitarioLiquido); } venda.NumeroSerieECF = NumeroSerie; venda.NumeroOrdemECF = Unimake.Convert.ToInt(NumeroECF); venda.COO = COO; venda.COOFinal = 0; // Todo: o valor do coo final será atualizado posteriormente pela emissão da redução z venda.CRO = CRO; venda.CCF = CCF; venda.CRZ = CRZ; venda.ValorGrandeTotalECF = GrandeTotal; venda.Save(); ACBrECF.SubtotalizaCupom(); ACBrECF.FechaCupom("Obrigado"); ACBrECF.CancelaCupom(); pv.Cancelar(DateTime.Today, "Cancelamento Automático - Emissão de Redução Z"); } } #endregion } finally { //aqui tem que liberar a variável da redução Z, pois será chamada em outros métodos que dependem // dos dados da última redução Z. Ou seja, os dados de pois de validados por este método. // Este método é chamado antes da redução Z _dadosReducaoZ = null; } }
public string DadosReducaoZ() { const int BUFFER_LEN = 16384; string retorno = GetString(ACBrECFInterop.ECF_GetDadosReducaoZ, BUFFER_LEN); DadosReducaoZClass = new DadosReducaoZClass(this); return retorno; }