Esempio n. 1
0
        private void PonerTitulo()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Registro = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
            string NuevoTitulo = "";

            if (Registro.Tipo != null)
            {
                NuevoTitulo += Registro.Tipo.NombreLargo;
            }

            if (Registro.Numero > 0)
            {
                NuevoTitulo += " ";

                if (Registro.PV > 0)
                {
                    NuevoTitulo += Registro.PV.ToString("0000") + "-";
                }

                NuevoTitulo += Registro.Numero.ToString("00000000");
            }
            else
            {
                if (Registro.PV > 0)
                {
                    NuevoTitulo += " PV " + Registro.PV.ToString("0000");
                }
            }

            this.Text = NuevoTitulo;
        }
Esempio n. 2
0
        private void EntradaProductos_ObtenerDatosSeguimiento(object sender, EventArgs e)
        {
            Lcc.Entrada.Articulos.DetalleComprobante Prod = sender as Lcc.Entrada.Articulos.DetalleComprobante;

            if (Prod == null)
            {
                return;
            }

            int IdArticulo = Prod.ValueInt;

            if (IdArticulo == 0)
            {
                return;
            }

            decimal Cant = Prod.Cantidad;

            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            Lfc.Articulos.EditarSeguimiento Editar = new Lfc.Articulos.EditarSeguimiento();
            Editar.Connection       = this.Connection;
            Editar.Articulo         = new Lbl.Articulos.Articulo(this.Connection, IdArticulo);
            Editar.Cantidad         = Math.Abs(System.Convert.ToInt32(Cant));
            Editar.SituacionOrigen  = Comprob.SituacionOrigen;
            Editar.DatosSeguimiento = Prod.DatosSeguimiento;
            if (Editar.ShowDialog() == DialogResult.OK)
            {
                Prod.DatosSeguimiento = Editar.DatosSeguimiento;
            }
        }
Esempio n. 3
0
 public override Lfx.Types.OperationResult SolicitudEliminacion(Lbl.ListaIds codigos)
 {
     using (Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog(@"Una vez anulados, los comprobantes deberán ser archivados en todas sus copias y no podrán ser rehabilitados ni reutilizados.", @"¿Está seguro de que desea anular?"))
     {
         Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo;
         if (Pregunta.ShowDialog() == System.Windows.Forms.DialogResult.OK)
         {
             int IdRemito = codigos[0];
             System.Data.IDbTransaction Trans = this.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable);
             System.Data.DataTable      Tabla = this.Connection.Select("select id_comprob from comprob where id_remito=" + IdRemito + " and anulada=0;");
             if (Tabla == null || Tabla.Rows.Count == 0)
             {
                 Lbl.Comprobantes.ComprobanteConArticulos Rem = new Lbl.Comprobantes.ComprobanteConArticulos(Connection, IdRemito);
                 if (Rem.Anulado == false)
                 {
                     Rem.Anular(false);
                     Trans.Commit();
                 }
             }
             else
             {
                 Lui.Forms.MessageBox.Show("No se puede anular si se encuentra relacionada con una factura", "¡Error!");
             }
         }
     }
     return(new Lfx.Types.SuccessOperationResult());
 }
Esempio n. 4
0
        internal Lfx.Types.OperationResult AgregarFactura(int idFactura)
        {
            Lbl.Comprobantes.Recibo Rec = this.Elemento as Lbl.Comprobantes.Recibo;
            if (Rec.Facturas == null)
            {
                Rec.Facturas = new Lbl.Comprobantes.ColeccionComprobanteImporte();
            }
            else
            {
                foreach (Lbl.Comprobantes.ComprobanteImporte CompImp in Rec.Facturas)
                {
                    Lbl.Comprobantes.ComprobanteConArticulos Fc = CompImp.Comprobante;
                    if (Fc.Id == idFactura)
                    {
                        return(new Lfx.Types.FailureOperationResult("La factura seleccionada ya está en la lista."));
                    }
                }
            }
            Lbl.Comprobantes.ComprobanteConArticulos Fac = new Lbl.Comprobantes.ComprobanteConArticulos(Rec.Connection, idFactura);
            Rec.Facturas.AddWithValue(Fac, Fac.ImporteImpago);

            if (EntradaCliente.ValueInt <= 0)
            {
                EntradaCliente.Elemento = Fac.Cliente;
            }

            this.MostrarFacturas();

            return(new Lfx.Types.SuccessOperationResult());
        }
Esempio n. 5
0
        public override void AfterPrint()
        {
            PuedeEditarPago = this.EsCancelable();

            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            if (Comprob.Impreso)
            {
                switch (Comprob.FormaDePago.Tipo)
                {
                case Lbl.Pagos.TiposFormasDePago.Efectivo:
                    //El pago lo asentó la rutina de impresión
                    //Yo sólo muestro la ventanita de calcular el cambio
                    Comprobantes.PagoVuelto FormularioVuelto = new Comprobantes.PagoVuelto();
                    FormularioVuelto.Total = Lfx.Types.Parsing.ParseCurrency(EntradaTotal.Text);
                    FormularioVuelto.ShowDialog();
                    break;

                case Lbl.Pagos.TiposFormasDePago.ChequePropio:
                case Lbl.Pagos.TiposFormasDePago.ChequeTerceros:
                case Lbl.Pagos.TiposFormasDePago.Tarjeta:
                case Lbl.Pagos.TiposFormasDePago.OtroValor:
                case Lbl.Pagos.TiposFormasDePago.Caja:
                    if (this.EsCancelable())
                    {
                        EditarPago();
                    }
                    break;
                }
            }
        }
Esempio n. 6
0
        public void MostrarFacturas()
        {
            ListaFacturas.BeginUpdate();
            ListaFacturas.Items.Clear();
            Lbl.Comprobantes.Recibo Rec = this.Elemento as Lbl.Comprobantes.Recibo;

            foreach (Lbl.Comprobantes.ComprobanteImporte CompImp in Rec.Facturas)
            {
                Lbl.Comprobantes.ComprobanteConArticulos Fc = CompImp.Comprobante;
                ListViewItem AgregarFactura = ListaFacturas.Items.Add(Fc.GetHashCode().ToString());
                AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Fc.ToString()));
                AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Lfx.Types.Formatting.FormatDate(Fc.Fecha)));
                AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Lfx.Types.Formatting.FormatCurrency(Fc.Total, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)));
                AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Lfx.Types.Formatting.FormatCurrency(Fc.Total - Fc.ImporteCancelado, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)));
            }

            LabelAgregarFacturas.Visible = ListaFacturas.Items.Count == 0 && this.Elemento.Existe == false;
            BotonQuitarFactura.Visible   = ListaFacturas.Items.Count > 0;

            if (ListaFacturas.Items.Count > 0 && ListaFacturas.SelectedItems.Count == 0)
            {
                ListaFacturas.Items[ListaFacturas.Items.Count - 1].Selected = true;
                ListaFacturas.Items[ListaFacturas.Items.Count - 1].Focused  = true;
            }

            EtiquetaFacturasImporte.Text = Lfx.Types.Formatting.FormatCurrency(Rec.Facturas.ImporteImpago, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales);

            ListaFacturas.EndUpdate();
        }
        public Lbl.Comprobantes.ColeccionDetalleArticulos ObtenerArticulos(Lbl.Comprobantes.ComprobanteConArticulos comprobante)
        {
            if (m_Articulos == null)
            {
                m_Articulos = new Lbl.Comprobantes.ColeccionDetalleArticulos(comprobante);
            }
            else
            {
                m_Articulos.Clear();
            }

            int i = 1;

            foreach (DetalleCompra Pro in this.ChildControls)
            {
                if (Pro.IsEmpty == false)
                {
                    Lbl.Comprobantes.DetalleArticulo DetArt = new Lbl.Comprobantes.DetalleArticulo(comprobante);
                    DetArt.Articulo           = Pro.Articulo;
                    DetArt.Alicuota           = Pro.Alicuota;
                    DetArt.Nombre             = Pro.TextDetail;
                    DetArt.Orden              = i++;
                    DetArt.Cantidad           = Pro.Cantidad;
                    DetArt.ImporteIvaUnitario = Pro.ImporteIvaUnitario;
                    DetArt.ImporteUnitario    = Pro.ImporteUnitario;
                    DetArt.ImporteNoGravado   = Pro.ImporteNoGravado;
                    DetArt.Descuento          = Pro.Descuento;
                    DetArt.DatosSeguimiento   = Pro.DatosSeguimiento;
                    m_Articulos.Add(DetArt);
                }
            }

            return(m_Articulos);
        }
Esempio n. 8
0
        public void Movimiento(bool auto, Lbl.Cajas.Concepto concepto, string textoConcepto,
                               Lbl.Personas.Persona cliente, decimal importe, string obs,
                               Lbl.Comprobantes.ComprobanteConArticulos factura, Lbl.Comprobantes.Recibo recibo, string comprobantes)
        {
            if (Lbl.Sys.Config.Actual.UsuarioConectado.TienePermiso(this.Caja, Lbl.Sys.Permisos.Operaciones.Mover) == false)
            {
                throw new Lfx.Types.Exceptions.AccessDeniedException("No tiene permiso para hacer movimientos en la caja solicitada");
            }

            decimal SaldoActual = this.ObtenerSaldo(true);

            qGen.IStatement InsertarMovimiento = new qGen.Insert("cajas_movim");
            InsertarMovimiento.ColumnValues.AddWithValue("id_caja", this.Caja.Id);
            InsertarMovimiento.ColumnValues.AddWithValue("id_sucursal", null);
            InsertarMovimiento.ColumnValues.AddWithValue("auto", auto ? 1 : 0);
            if (concepto == null)
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_concepto", null);
            }
            else
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_concepto", concepto.Id);
            }
            InsertarMovimiento.ColumnValues.AddWithValue("concepto", textoConcepto);
            InsertarMovimiento.ColumnValues.AddWithValue("id_persona", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
            if (cliente == null)
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_cliente", null);
            }
            else
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_cliente", cliente.Id);
            }
            InsertarMovimiento.ColumnValues.AddWithValue("fecha", new qGen.SqlExpression("NOW()"));
            InsertarMovimiento.ColumnValues.AddWithValue("importe", importe);
            if (factura == null)
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_comprob", null);
            }
            else
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_comprob", factura.Id);
            }
            if (recibo == null)
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_recibo", null);
            }
            else
            {
                InsertarMovimiento.ColumnValues.AddWithValue("id_recibo", recibo.Id);
            }
            InsertarMovimiento.ColumnValues.AddWithValue("comprob", comprobantes);
            InsertarMovimiento.ColumnValues.AddWithValue("saldo", SaldoActual + importe);
            InsertarMovimiento.ColumnValues.AddWithValue("obs", obs);
            //System.Data.IDbTransaction Trans =this.Connection.BeginTransaction();
            this.Connection.ExecuteNonQuery(InsertarMovimiento);
            // Trans.Commit();
        }
Esempio n. 9
0
        public Anular(string tipo)
        {
            if (Lbl.Sys.Config.Actual.UsuarioConectado.TienePermiso(typeof(Lbl.Comprobantes.Factura), Lbl.Sys.Permisos.Operaciones.Eliminar) == false)
            {
                this.DialogResult = System.Windows.Forms.DialogResult.Abort;
                this.Close();
                return;
            }
            InitializeComponent();
            string[] param = tipo.Split('®');
            // Lleno el listado de tipos de factura
            List <Lbl.Comprobantes.Tipo> TiposFacturaVenta = new List <Lbl.Comprobantes.Tipo>();

            foreach (Lbl.Comprobantes.Tipo Tp in Lbl.Comprobantes.Tipo.TodosPorLetra.Values)
            {
                if (Tp.EsFacturaOTicket && Tp.PermiteVenta)
                {
                    TiposFacturaVenta.Add(Tp);
                }
            }
            string[] ListaFactVenta = new string[TiposFacturaVenta.Count];
            int      i = 0;

            foreach (Lbl.Comprobantes.Tipo Tp in TiposFacturaVenta)
            {
                ListaFactVenta[i++] = Tp.NombreLargo + "|" + Tp.LetraONomenclatura;
            }

            this.EntradaTipo.SetData = ListaFactVenta;

            OkButton.Text    = "Anular";
            OkButton.Visible = false;

            if (param.Length > 1)
            {
                EntradaCompra.ValueInt = int.Parse(param[1]);
                this.DeCompra          = param[1] == "0" ? false : true;
                tipo = param[0];
            }

            int IdFac = int.Parse(tipo);

            Lbl.Comprobantes.ComprobanteConArticulos Fac = new Lbl.Comprobantes.ComprobanteConArticulos(this.Connection, IdFac);
            if (Fac != null)
            {
                if (Fac.Numero == 0)
                {
                    IdAnular = Fac.Id;
                    MostrarVistaPrevia();
                }
                EntradaPV.ValueInt    = Fac.PV;
                EntradaDesde.ValueInt = EntradaHasta.ValueInt = Fac.Numero;
                if (Fac.TipoFac.Length > 1)
                {
                    EntradaTipo.TextKey = Fac.TipoFac.Substring(1);
                }
            }
        }
Esempio n. 10
0
        public void Movimiento(bool auto, Lbl.Cajas.Concepto concepto, string textoConcepto,
                               Lbl.Personas.Persona cliente, decimal importe, string obs,
                               Lbl.Comprobantes.ComprobanteConArticulos factura, Lbl.Comprobantes.Recibo recibo, string comprobantes)
        {
            if (Lbl.Sys.Config.Actual.UsuarioConectado.TienePermiso(this, Lbl.Sys.Permisos.Operaciones.Mover) == false)
            {
                throw new Lfx.Types.Exceptions.AccessDeniedException("No tiene permiso para hacer movimientos en la caja solicitada");
            }

            decimal SaldoActual = this.ObtenerSaldo(true);

            qGen.TableCommand InsertarMovimiento = new qGen.Insert(this.Connection, "cajas_movim");
            InsertarMovimiento.Fields.AddWithValue("id_caja", this.Id);
            InsertarMovimiento.Fields.AddWithValue("auto", auto ? 1 : 0);
            if (concepto == null)
            {
                InsertarMovimiento.Fields.AddWithValue("id_concepto", null);
            }
            else
            {
                InsertarMovimiento.Fields.AddWithValue("id_concepto", concepto.Id);
            }
            InsertarMovimiento.Fields.AddWithValue("concepto", textoConcepto);
            InsertarMovimiento.Fields.AddWithValue("id_persona", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
            if (cliente == null)
            {
                InsertarMovimiento.Fields.AddWithValue("id_cliente", null);
            }
            else
            {
                InsertarMovimiento.Fields.AddWithValue("id_cliente", cliente.Id);
            }
            InsertarMovimiento.Fields.AddWithValue("fecha", qGen.SqlFunctions.Now);
            InsertarMovimiento.Fields.AddWithValue("importe", importe);
            if (factura == null)
            {
                InsertarMovimiento.Fields.AddWithValue("id_comprob", null);
            }
            else
            {
                InsertarMovimiento.Fields.AddWithValue("id_comprob", factura.Id);
            }
            if (recibo == null)
            {
                InsertarMovimiento.Fields.AddWithValue("id_recibo", null);
            }
            else
            {
                InsertarMovimiento.Fields.AddWithValue("id_recibo", recibo.Id);
            }
            InsertarMovimiento.Fields.AddWithValue("comprob", comprobantes);
            InsertarMovimiento.Fields.AddWithValue("saldo", SaldoActual + importe);
            InsertarMovimiento.Fields.AddWithValue("obs", obs);
            this.Connection.Execute(InsertarMovimiento);
        }
Esempio n. 11
0
 public void Movimiento(bool auto,
                        Lbl.Cajas.Concepto concepto,
                        string textoConcepto,
                        decimal importeDebito,
                        string obs,
                        Lbl.Comprobantes.ComprobanteConArticulos comprob,
                        Lbl.Comprobantes.Recibo recibo,
                        string textoComprob)
 {
     this.Movimiento(auto, concepto, textoConcepto, importeDebito, obs, comprob, recibo, textoComprob, null);
 }
Esempio n. 12
0
 /// <summary>
 /// Asienta un movimiento en la cuenta corriente, y cancela comprobantes asociados.
 /// </summary>
 /// <param name="auto">Indica si es un movimiento automático (generado por el sistema) o manual (generado por el usuario).</param>
 /// <param name="concepto">El concepto bajo el cual se realiza el movimiento.</param>
 /// <param name="textoConcepto">El texto que describe al concepto.</param>
 /// <param name="importeDebito">El importe a debitar de la cuenta. Un importe negativo indica un crédito.</param>
 /// <param name="obs">Observaciones.</param>
 /// <param name="comprob">El comprobante asociado a este movimiento.</param>
 /// <param name="recibo">El recibo asociado a este movimiento.</param>
 /// <param name="textoComprob">Un texto sobre los comprobantes asociados al sistema.</param>
 /// <param name="extras">Colección de campos adicionales para el registro.</param>
 public void AsentarMovimiento(bool auto,
                               Lbl.Cajas.Concepto concepto,
                               string textoConcepto,
                               decimal importeDebito,
                               string obs,
                               Lbl.Comprobantes.ComprobanteConArticulos comprob,
                               Lbl.Comprobantes.Recibo recibo,
                               string textoComprob,
                               Dictionary <string, object> extras)
 {
     CtaCteController.AsentarMovimiento(auto, concepto, textoConcepto, importeDebito, obs, comprob, recibo, textoComprob, extras);
 }
Esempio n. 13
0
 public void Movimiento(bool auto, Lbl.Cajas.Concepto concepto, string textoConcepto,
                        Lbl.Personas.Persona cliente, decimal importe, string obs,
                        Lbl.Comprobantes.ComprobanteConArticulos factura, Lbl.Comprobantes.Recibo recibo, string comprobantes)
 {
     CajaController = new Lazaro.Base.Controller.CajaController(
         new Lazaro.Orm.EntityManager(this.Connection, Lfx.Workspace.Master.MetadataFactory),
         this
         );
     CajaController.Movimiento(auto, concepto, textoConcepto,
                               cliente, importe, obs,
                               factura, recibo, comprobantes);
 }
Esempio n. 14
0
 internal bool EsCancelable()
 {
     Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
     if (Comprob == null || Comprob.ImporteImpago == 0)
     {
         return(false);
     }
     else
     {
         return(Comprob.Impreso && Comprob.Anulado == false && Comprob.Existe && Comprob.FormaDePago != null);
     }
 }
Esempio n. 15
0
        public override void ActualizarControl()
        {
            IgnorarEventos = true;

            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            this.SuspendLayout();

            EntradaPV.Text           = Comprob.PV.ToString();
            EntradaVendedor.Elemento = Comprob.Vendedor;

            Ignorar_EntradaCliente_TextChanged = true;
            EntradaCliente.Elemento            = Comprob.Cliente;
            Ignorar_EntradaCliente_TextChanged = false;

            if (this.DiscriminarIva)
            {
                EntradaSubTotal.ValueDecimal = Comprob.SubtotalSinIva;
                EntradaIva.ValueDecimal      = Comprob.ImporteIvaDiscriminado;
            }
            else
            {
                EntradaSubTotal.ValueDecimal = Comprob.SubtotalSinIva + Comprob.ImporteIva;
                EntradaIva.ValueDecimal      = 0m;
            }
            EntradaDescuento.ValueDecimal = Comprob.Descuento;
            EntradaInteres.ValueDecimal   = Comprob.Recargo;
            EntradaCuotas.ValueInt        = Comprob.Cuotas;

            EntradaSubTotalIva.ValueDecimal = EntradaSubTotal.ValueDecimal + EntradaIva.ValueDecimal;
            EntradaTotal.ValueDecimal       = Comprob.Total;

            if (this.Elemento.Existe == true || this.PuedeEditar() == false)
            {
                // No actualizar automáticamente detalles
                EntradaProductos.AutoUpdate = false;
            }
            else
            {
                EntradaProductos.AutoUpdate = true;
            }

            // Cargo el detalle del comprobante
            EntradaProductos.CargarArticulos(Comprob.Articulos);

            this.ResumeLayout();

            this.PonerTitulo();
            base.ActualizarControl();

            IgnorarEventos = false;
        }
Esempio n. 16
0
        public override bool PuedeImprimir()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            if (Comprob.Tipo != null && Comprob.Tipo.PermiteImprimirVariasVeces == false && Comprob.Impreso)
            {
                return(false);
            }
            else
            {
                return(base.PuedeImprimir());
            }
        }
Esempio n. 17
0
        public override void OnLoad()
        {
            if (this.Registro != null)
            {
                if (this.GetFieldValue <int>("id_banco") > 0)
                {
                    this.Banco = new Bancos.Banco(this.Connection, this.GetFieldValue <int>("id_banco"));
                }
                else
                {
                    this.Banco = null;
                }

                if (this.GetFieldValue <int>("id_concepto") > 0)
                {
                    this.Concepto = new Cajas.Concepto(this.Connection, this.GetFieldValue <int>("id_concepto"));
                }
                else
                {
                    this.Concepto = null;
                }

                if (this.GetFieldValue <int>("id_chequera") > 0)
                {
                    this.Chequera = new Bancos.Chequera(this.Connection, this.GetFieldValue <int>("id_chequera"));
                }
                else
                {
                    this.Chequera = null;
                }

                if (this.GetFieldValue <int>("id_cliente") > 0)
                {
                    this.Cliente = new Personas.Persona(this.Connection, this.GetFieldValue <int>("id_cliente"));
                }
                else
                {
                    this.Cliente = null;
                }

                if (this.GetFieldValue <int>("id_comprob") > 0)
                {
                    this.Factura = new Comprobantes.ComprobanteConArticulos(this.Connection, this.GetFieldValue <int>("id_comprob"));
                }
                else
                {
                    this.Factura = null;
                }
            }
            base.OnLoad();
        }
Esempio n. 18
0
        private void CrearReciboParaEstaFactura()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Factura = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
            Lbl.Comprobantes.ReciboDeCobro           Recibo  = new Lbl.Comprobantes.ReciboDeCobro(Lfx.Workspace.Master.GetNewConnection("Nuevo recibo para " + Factura.ToString()) as Lfx.Data.Connection);
            Recibo.Crear();
            Recibo.Facturas.AddWithValue(Factura, Factura.ImporteImpago);
            Recibo.Cliente = Factura.Cliente;

            Recibo.Concepto      = Lbl.Cajas.Concepto.IngresosPorFacturacion;
            Recibo.ConceptoTexto = "Cancelación de " + Factura.ToString();

            Lfc.FormularioEdicion NuevoRecibo = Lfc.Instanciador.InstanciarFormularioEdicion(Recibo);
            NuevoRecibo.MdiParent = this.ParentForm.MdiParent;
            NuevoRecibo.Show();
        }
Esempio n. 19
0
        public override void ActualizarElemento()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            Comprob.PV       = EntradaPV.ValueInt;
            Comprob.Vendedor = new Lbl.Personas.Persona(Comprob.Connection, EntradaVendedor.ValueInt);
            Comprob.Cliente  = new Lbl.Personas.Persona(Comprob.Connection, EntradaCliente.ValueInt);

            Comprob.Descuento = EntradaDescuento.ValueDecimal;
            Comprob.Recargo   = EntradaInteres.ValueDecimal;
            Comprob.Cuotas    = EntradaCuotas.ValueInt;

            Comprob.Articulos = EntradaProductos.ObtenerArticulos(Comprob);

            base.ActualizarElemento();
        }
Esempio n. 20
0
        public Lfx.Types.OperationResult ImprimirFacturaElectronicaAfip(Lbl.Comprobantes.ComprobanteConArticulos comprobante)
        {
            Lfx.Types.OperationResult Res = this.IniciarWsAfip();
            if (Res.Success == false)
            {
                return(Res);
            }

            var TipoComprob   = Afip.Ws.FacturaElectronica.Tablas.ComprobantesTiposPorLetra[comprobante.Tipo.Nomenclatura];
            var UltimoComprob = CliFe.UltimoComprobante(comprobante.PV, TipoComprob);

            int ProximoNumero = UltimoComprob.CbteNro + 1;

            var SolCae = Util.Comprobantes.ClienteAfipWsfe.CrearSolicitudCae(comprobante, ProximoNumero);

            var CantidadImpresos = CliFe.SolictarCae(SolCae);

            // TODO: tratamiento de errores

            foreach (var Comprob in SolCae.Comprobantes)
            {
                if (Comprob.Cae != null && string.IsNullOrWhiteSpace(Comprob.Cae.CodigoCae) == false)
                {
                    new Lbl.Comprobantes.Numerador(comprobante).Numerar(Comprob.Numero, Comprob.Cae.CodigoCae, Comprob.Cae.Vencimiento, true);
                    this.GenerarPdf(comprobante);
                }
            }


            if (CantidadImpresos > 0)
            {
                // La solicitud tuvo éxito (total o parcial)
                return(new Lfx.Types.SuccessOperationResult());
            }
            else
            {
                // La solicitud de CAE fue rechazada
                if (SolCae.Observaciones.Count > 0)
                {
                    return(new Lfx.Types.FailureOperationResult(SolCae.Observaciones[0].Mensaje));
                }
                else
                {
                    return(new Lfx.Types.FailureOperationResult("La solicitud de CAE fue rechazada"));
                }
            }
        }
Esempio n. 21
0
        public override bool PuedeEditar()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            if (Comprob.Estado != 0)
            {
                return(false);
            }
            else if (Comprob.Impreso && Comprob.Tipo != null && Comprob.Tipo.PermiteModificarImpresos == false)
            {
                return(false);
            }
            else
            {
                return(base.PuedeEditar());
            }
        }
Esempio n. 22
0
        /// <summary>
        /// Generar un PDF a partir de un comprobante y guardarlo en la carpeta predeterminada de comprobantes.
        /// </summary>
        public void GenerarPdf(Lbl.Comprobantes.ComprobanteConArticulos comprobante)
        {
            var Generador = new Util.Comprobantes.GeneradorPdf(comprobante);

            var VariantePv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[comprobante.PV].Variante;

            if (VariantePv > 0)
            {
                Generador.Variante = (Util.Comprobantes.Variantes)VariantePv;
            }

            var Carpeta = System.IO.Path.Combine(Lbl.Sys.Config.CarpetaEmpresa, "Comprobantes", "PV" + comprobante.PV.ToString());

            Lfx.Environment.Folders.EnsurePathExists(Carpeta);

            Generador.GenerarYGuardar(System.IO.Path.Combine(Carpeta, comprobante.ToString() + ".pdf"));
        }
Esempio n. 23
0
        public override void ActualizarElemento()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Res = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
            //Agrego campos propios de esta instancia
            if (EntradaFormaPago.ValueInt > 0)
            {
                Res.FormaDePago = new Lbl.Pagos.FormaDePago(Res.Connection, EntradaFormaPago.ValueInt);
            }
            else
            {
                Res.FormaDePago = null;
            }

            if (PanelComprobanteOriginal.Visible)
            {
                Res.ComprobanteOriginal = EntradaComprobanteOriginal.Elemento as Lbl.Comprobantes.ComprobanteFacturable;
            }

            if (EntradaRemito.Text.Length > 0)
            {
                int RemitoNumero, RemitoPv;
                if (EntradaRemito.Text.IndexOfAny(new char[] { '-' }) >= 0)
                {
                    // El número de remito tiene guión
                    string[] Partes = EntradaRemito.Text.Split(new char[] { '-' });
                    RemitoNumero = Lfx.Types.Parsing.ParseInt(Partes[0]);
                    RemitoPv     = Lfx.Types.Parsing.ParseInt(Partes[1]);
                }
                else
                {
                    // El número de remito no tiene guión, asumo el mismo PV que la factura
                    RemitoNumero = EntradaRemito.ValueInt;
                    RemitoPv     = EntradaPV.ValueInt;
                }

                Res.IdRemito = this.Connection.FieldInt("SELECT id_comprob FROM comprob WHERE compra=0 AND tipo_fac!='R' AND pv=" + RemitoPv.ToString() + " AND numero=" + RemitoNumero.ToString() + " AND impresa>0 AND anulada=0");
            }
            else
            {
                Res.IdRemito = 0;
            }

            base.ActualizarElemento();
        }
Esempio n. 24
0
        internal virtual Lfx.Types.OperationResult ConvertirEn(string tipoComprob)
        {
            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
            if (Comprob.Existe)
            {
                Lbl.Comprobantes.Tipo NuevoTipo = Lbl.Comprobantes.Tipo.TodosPorLetra[tipoComprob];
                Lbl.Comprobantes.ComprobanteConArticulos Nuevo = Comprob.Convertir(NuevoTipo) as Lbl.Comprobantes.ComprobanteConArticulos;

                FormularioEdicion NuevoComprob = Instanciador.InstanciarFormularioEdicion(Nuevo);
                NuevoComprob.ControlDestino = EntradaComprobanteId;
                NuevoComprob.MdiParent      = this.ParentForm.MdiParent;
                NuevoComprob.Show();
                return(new Lfx.Types.SuccessOperationResult());
            }
            else
            {
                return(new Lfx.Types.FailureOperationResult("Debe guardar el comprobante antes de poder convertirlo."));
            }
        }
Esempio n. 25
0
 private void MostrarSinNumero()
 {
     label3.Visible       = EntradaAnularPagos.Visible = EntradaTipo.Visible = EntradaCompra.Visible = false;
     EntradaDesde.Visible = EntradaHasta.Visible = EntradaPV.Visible = false;
     Lbl.Comprobantes.ComprobanteConArticulos Fac = new Lbl.Comprobantes.ComprobanteConArticulos(this.Connection, IdAnular);
     if (Fac != null)
     {
         ListadoFacturas.BeginUpdate();
         ListadoFacturas.Items.Clear();
         ListViewItem Itm = ListadoFacturas.Items.Add(Fac.Tipo.ToString());
         Itm.SubItems.Add(Fac.PV.ToString("0000") + "-" + Fac.Numero.ToString("00000000"));
         Itm.SubItems.Add(Fac.Fecha.ToString(Lfx.Types.Formatting.DateTime.ShortDatePattern));
         Itm.SubItems.Add(Fac.Cliente.ToString());
         Itm.SubItems.Add(Lfx.Types.Formatting.FormatCurrency(Fac.Total));
         ListadoFacturas.EndUpdate();
         EtiquetaAviso.Text    = "Se van a anular un comprobante, que no tiene n° asignado.";
         this.OkButton.Visible = true;
     }
 }
Esempio n. 26
0
        public override void AfterPrint()
        {
            PuedeEditarPago = this.EsCancelable();

            Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;

            if (Comprob.Impreso)
            {
                if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV))
                {
                    var Pv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV];
                    if (Pv.Tipo == Lbl.Comprobantes.TipoPv.ElectronicoAfip)
                    {
                        // Es un punto de venta electrónico... abro el PDF generado
                        var Carpeta = System.IO.Path.Combine(Lbl.Sys.Config.CarpetaEmpresa, "Comprobantes", "PV" + Comprob.PV.ToString());
                        System.Diagnostics.Process.Start(System.IO.Path.Combine(Carpeta, Comprob.ToString() + ".pdf"));
                    }
                }

                switch (Comprob.FormaDePago.Tipo)
                {
                case Lbl.Pagos.TiposFormasDePago.Efectivo:
                    //El pago lo asentó la rutina de impresión
                    //Yo sólo muestro la ventanita de calcular el cambio
                    Comprobantes.PagoVuelto FormularioVuelto = new Comprobantes.PagoVuelto();
                    FormularioVuelto.Total = Lfx.Types.Parsing.ParseCurrency(EntradaTotal.Text);
                    FormularioVuelto.ShowDialog();
                    break;

                case Lbl.Pagos.TiposFormasDePago.ChequePropio:
                case Lbl.Pagos.TiposFormasDePago.ChequeTerceros:
                case Lbl.Pagos.TiposFormasDePago.Tarjeta:
                case Lbl.Pagos.TiposFormasDePago.OtroValor:
                case Lbl.Pagos.TiposFormasDePago.Caja:
                    if (this.EsCancelable())
                    {
                        EditarPago();
                    }
                    break;
                }
            }
        }
Esempio n. 27
0
        new public ComprobanteDeCompra Convertir(Tipo tipo)
        {
            if (tipo.NombreTipoLbl == "Lbl.Comprobantes.Remito")
            {
                tipo.NombreTipoLbl = "Lbl.Comprobantes.RemitoCompra";
            }

            if (tipo.NombreTipoLbl == "Lbl.Comprobantes.Factura")
            {
                tipo.NombreTipoLbl = "Lbl.Comprobantes.ComprobanteDeCompra";
            }

            Lbl.Comprobantes.ComprobanteConArticulos Res = base.Convertir(tipo);
            Res.Compra = true;
            Res.Fecha  = DateTime.Now;
            if (tipo.NombreTipoLbl == "Lbl.Comprobantes.RemitoCompra")
            {
                tipo.NombreTipoLbl = "Lbl.Comprobantes.Remito";
            }
            return((ComprobanteDeCompra)Res);
        }
Esempio n. 28
0
        private bool AnularSinNumero()
        {
            Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Anulando comprobantes", "Se están anulando los comprobantes seleccionados.");
            Progreso.Cancelable = true;
            Progreso.Max        = 1;
            Progreso.Begin();

            IDbTransaction Trans = this.Connection.BeginTransaction(IsolationLevel.Serializable);

            Lbl.Comprobantes.ComprobanteConArticulos Fac = new Lbl.Comprobantes.ComprobanteConArticulos(Connection, IdAnular);
            if (Fac.Anulado == false)
            {
                Fac.Anular(false);
            }
            Progreso.Advance(1);
            Progreso.End();

            if (Progreso.Cancelar)
            {
                Trans.Rollback();
                Lfx.Workspace.Master.RunTime.Toast("La operación fue cancelada.", "Aviso");
                return(false);
            }
            else
            {
                Trans.Commit();
                ProximosNumeros.Clear();
                if (this.DeCompra)
                {
                    Lui.Forms.MessageBox.Show("Se anularon los comprobantes seleccionados. Si fueron anulados por error de carga, ahora puede cargarlos nuevamente.", "Aviso");
                }
                else
                {
                    Lui.Forms.MessageBox.Show("Se anularon los comprobantes seleccionados. Recuerde archivar ambas copias.", "Aviso");
                }
                return(true);
            }
        }
Esempio n. 29
0
        private void EditarMasDatos()
        {
            Lbl.Comprobantes.ComprobanteConArticulos Registro = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
            using (Comprobantes.FormComprobanteMasDatos FormMasDatos = new Comprobantes.FormComprobanteMasDatos()) {
                FormMasDatos.Owner = this.ParentForm;
                FormMasDatos.EntradaDesdeSituacion.Elemento          = Registro.SituacionOrigen;
                FormMasDatos.EntradaHaciaSituacion.Elemento          = Registro.SituacionDestino;
                FormMasDatos.EntradaDesdeSituacion.TemporaryReadOnly = EntradaCliente.TemporaryReadOnly;
                FormMasDatos.EntradaHaciaSituacion.TemporaryReadOnly = EntradaCliente.TemporaryReadOnly;
                FormMasDatos.EntradaBloqueada.TextKey = ((Lbl.ICamposBaseEstandar)(this.Elemento)).Estado.ToString();

                if (Registro.Tipo.EsFactura)
                {
                    FormMasDatos.EntradaDesdeSituacion.Filter = "facturable=1";
                }
                else
                {
                    FormMasDatos.EntradaDesdeSituacion.Filter = "";
                }

                if (FormMasDatos.ShowDialog() == DialogResult.OK)
                {
                    Lbl.Articulos.Situacion NuevoOrigen = FormMasDatos.EntradaDesdeSituacion.Elemento as Lbl.Articulos.Situacion;
                    if ((NuevoOrigen == null && Registro.SituacionOrigen != null) ||
                        (NuevoOrigen != null && Registro.SituacionOrigen == null) ||
                        (NuevoOrigen != null && NuevoOrigen.Id != Registro.SituacionOrigen.Id))
                    {
                        // Cambió la situación de origen... borro los datos de seguimiento
                        EntradaProductos.BorrarDatosDeSeguimiento();
                    }
                    Registro.SituacionOrigen  = NuevoOrigen;
                    Registro.SituacionDestino = FormMasDatos.EntradaHaciaSituacion.Elemento as Lbl.Articulos.Situacion;
                    ((Lbl.ICamposBaseEstandar)(this.Elemento)).Estado = Lfx.Types.Parsing.ParseInt(FormMasDatos.EntradaBloqueada.TextKey);
                    this.TemporaryReadOnly = Lfx.Types.Parsing.ParseInt(FormMasDatos.EntradaBloqueada.TextKey) != 0;
                }
            }
        }
Esempio n. 30
0
        private void Convertir()
        {
            Comprobantes.Convertir FormConvertir = new Comprobantes.Convertir();
            FormConvertir.OrigenTipo   = this.Tipo.Nomenclatura;
            FormConvertir.DestinoTipo  = "F";
            FormConvertir.OrigenNombre = this.Elemento.ToString();

            if (FormConvertir.ShowDialog() == DialogResult.OK)
            {
                string ConvertirEnTipo = FormConvertir.DestinoTipo;
                if (ConvertirEnTipo == "F" || ConvertirEnTipo == "NC" || ConvertirEnTipo == "ND")
                {
                    if (this.Tipo.Letra.Length > 0 && "ABCEM".IndexOf(this.Tipo.Letra) >= 0)
                    {
                        ConvertirEnTipo += this.Tipo.Letra;
                    }
                    else
                    {
                        Lbl.Comprobantes.ComprobanteConArticulos Compr = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos;
                        if (Compr != null && Compr.Cliente != null && Compr.Cliente.LetraPredeterminada().Length > 0)
                        {
                            ConvertirEnTipo += Compr.Cliente.LetraPredeterminada();
                        }
                        else
                        {
                            ConvertirEnTipo += "B";
                        }
                    }
                }
                Lfx.Types.OperationResult Resultado = ConvertirEn(ConvertirEnTipo);

                if (Resultado.Success == false)
                {
                    Lui.Forms.MessageBox.Show(Resultado.Message, "Error");
                }
            }
        }
Esempio n. 31
0
                public Lazaro.Impresion.Comprobantes.Fiscal.Respuesta ImprimirComprobante(int idComprob)
                {
                        try {
                                using (System.Diagnostics.Process Yo = System.Diagnostics.Process.GetCurrentProcess()) {
                                        Yo.PriorityClass = System.Diagnostics.ProcessPriorityClass.AboveNormal;
                                }
                        } catch {
                                // No siempre puedo elevar mi propia prioridad (creo que sólo en Windows XP o en Vista/7 sin UAC)
                        }

                        // *** Inicializar la impresora fiscal
                        Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res = this.Inicializar();

                        if (Res.Error != ErroresFiscales.Ok)
                                return Res;

                        NotificacionEventHandler NotifHandler = Notificacion;
                        if (NotifHandler != null)
                                NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.InicioImpresion));

                        // *** Obtener datos previos
                        Lbl.Comprobantes.ComprobanteConArticulos Comprob = new Lbl.Comprobantes.ComprobanteConArticulos(DataBase, idComprob);

                        if (Comprob.Impreso)
                                return new Respuesta(ErroresFiscales.Ok);

                        string TipoDocumento = null;
                        string Letra = null;

                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        if (Comprob.Tipo.EsNotaDebito) {
                                                TipoDocumento = "D";
                                        } else if (Comprob.Tipo.EsNotaCredito) {
                                                TipoDocumento = "M";
                                        } else {
                                                TipoDocumento = "T";
                                        }
                                        break;
                                default:

                                        if (Comprob.Tipo.EsNotaDebito) {
                                                TipoDocumento = "D";
                                        } else if (Comprob.Tipo.EsNotaCredito) {
                                                TipoDocumento = "C";
                                        } else if (Comprob.Tipo.EsTicket) {
                                                TipoDocumento = "T";
                                        } else {
                                                TipoDocumento = "F";
                                        }
                                        break;
                        }

                        switch (Comprob.Tipo.Nomenclatura) {
                                case "FM":
                                case "NDM":
                                case "NCM":
                                        Letra = "M";
                                        break;
                                case "FA":
                                case "NDA":
                                        Letra = "A";
                                        break;
                                case "NCA":
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora)
                                                Letra = "R";
                                        else
                                                Letra = "A";
                                        break;

                                case "FB":
                                case "NDB":
                                        Letra = "B";
                                        break;
                                case "NCB":
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora)
                                                Letra = "S";
                                        else
                                                Letra = "B";
                                        break;

                                case "FC":
                                case "NDC":
                                        Letra = "C";
                                        break;
                                case "NCC":
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora)
                                                Letra = "S";
                                        else
                                                Letra = "C";
                                        break;

                                case "FE":
                                case "NDE":
                                case "NCE":
                                        Letra = "E";
                                        break;
                        }

                        string ClienteTipoDoc = "DNI";
                        string ClienteNumDoc = Comprob.Cliente.NumeroDocumento.Replace("-", "").Replace(".", "");

                        if (Comprob.Cliente.TipoDocumento != null) {
                                switch (Comprob.Cliente.TipoDocumento.Id) {
                                        case 1:
                                                ClienteTipoDoc = "DNI";
                                                break;
                                        case 2:
                                                ClienteTipoDoc = "LE";
                                                break;
                                        case 3:
                                                ClienteTipoDoc = "LC";
                                                break;
                                        case 4:
                                                ClienteTipoDoc = "CI";
                                                break;
                                        case 5:
                                                if (ClienteNumDoc.Length > 0)
                                                        ClienteTipoDoc = "CUIL";
                                                break;
                                        case 6:
                                                if (ClienteNumDoc.Length > 0)
                                                        ClienteTipoDoc = "CUIT";
                                                break;
                                        default:
                                                ClienteTipoDoc = "DNI";
                                                break;
                                }
                        }

                        if (Comprob.Cliente.SituacionTributaria != null) {
                                switch (Comprob.Cliente.SituacionTributaria.Id) {
                                        case 1:
                                                ClienteNumDoc = Comprob.Cliente.NumeroDocumento.Replace("-", "").Replace(" ", "").Replace(".", "");
                                                ClienteTipoDoc = "DNI";
                                                break;
                                        case 2:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                        case 3:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                        case 4:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                        case 5:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                }
                        }

                        Comando ComandoAEnviar;

                        string TextoRemitoLinea1 = "";
                        string TextoRemitoLinea2 = "";

                        if (Comprob.IdRemito == 0) {
                                if (Comprob.Obs == null) {
                                        TextoRemitoLinea1 = "";
                                } else if (Comprob.Obs.Length > 40) {
                                        TextoRemitoLinea1 = Comprob.Obs.Substring(0, 40);
                                        int RestoObs = Comprob.Obs.Length - 40;
                                        if (RestoObs > 40)
                                                RestoObs = 40;
                                        TextoRemitoLinea2 = Comprob.Obs.Substring(40, RestoObs);
                                } else {
                                        TextoRemitoLinea1 = Comprob.Obs;
                                }
                        } else {
                                TextoRemitoLinea1 = "Remito(s) " + Comprob.IdRemito.ToString();
                        }

                        string Domicilio = Comprob.Cliente.Domicilio;
                        string ClienteLocalidad = "";
                        if (Comprob.Cliente.Localidad != null)
                                ClienteLocalidad = Comprob.Cliente.Localidad.ToString();

                        //si hay un documento abierto (fiscal, no fiscal o no fiscal homologado) lo cancelo
                        Res = ObtenerEstadoImpresora();
                        if (Res.EstadoFiscal.DocumentoAbierto) {
                                Res = CancelarDocumentoFiscal();
                                System.Threading.Thread.Sleep(500);
                        }
                        // *** Abrir Documento
                        if (NotifHandler != null)
                                NotifHandler(this, new ImpresoraEventArgs("Abrir documento fiscal"));

                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        string ClienteLinea1 = "";
                                        string ClienteLinea2 = "";

                                        if (Comprob.Cliente.ToString().Length > 40) {
                                                ClienteLinea1 = Comprob.Cliente.ToString().Substring(0, 40);
                                                ClienteLinea2 = Comprob.Cliente.ToString().Substring(40, Comprob.Cliente.ToString().Length - 40);
                                        } else {
                                                ClienteLinea1 = Comprob.Cliente.ToString();
                                                ClienteLinea2 = "";
                                        }

                                        if (Domicilio.Length > 40)
                                                Domicilio = Domicilio.Substring(0, 40);

                                        if (ClienteLocalidad.Length > 40)
                                                ClienteLocalidad = ClienteLocalidad.Substring(0, 40);

                                        string ClienteSituacionEpson = "";
                                        switch (Comprob.Cliente.SituacionTributaria.Id) {
                                                case 1:
                                                        ClienteSituacionEpson = "F";
                                                        break;
                                                case 2:
                                                        ClienteSituacionEpson = "I";
                                                        break;
                                                case 3:
                                                        ClienteSituacionEpson = "R";
                                                        break;
                                                case 4:
                                                        ClienteSituacionEpson = "M";
                                                        break;
                                                case 5:
                                                        ClienteSituacionEpson = "E";
                                                        break;
                                                default:
                                                        ClienteSituacionEpson = "S";
                                                        break;
                                        }
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.EpsonTiquedora) {
                                                // La impresora epson TMU220 no acepta vacios por eso cambio por un punto.
                                                string Vacio=".";
                                                        if (TextoRemitoLinea1=="")
                                                        TextoRemitoLinea1 = ".";
                                                        if (TextoRemitoLinea2 == "")
                                                        TextoRemitoLinea2 = ".";
                                                
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalAbrir,
                                                         TipoDocumento,
                                                         "C",
                                                         Letra,
                                                         "1",
                                                         "P",
                                                         "10",
                                                         "I",
                                                        FiscalizarTexto(ClienteSituacionEpson),
                                                        FiscalizarTexto(ClienteLinea1),
                                                        FiscalizarTexto(ClienteLinea2),
                                                        FiscalizarTexto(ClienteTipoDoc),
                                                        FiscalizarTexto(ClienteNumDoc),
                                                        "N",
                                                        FiscalizarTexto(Domicilio),
                                                        FiscalizarTexto(ClienteLocalidad),
                                                        Vacio,
                                                        FiscalizarTexto(TextoRemitoLinea1),
                                                        FiscalizarTexto(TextoRemitoLinea2),
                                                        "C");
                                        } else {
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalAbrir,
                                                        TipoDocumento,
                                                        "C",
                                                        Letra,
                                                        "1",
                                                        "F",
                                                        "12",
                                                        "I",
                                                        FiscalizarTexto(ClienteSituacionEpson),
                                                        FiscalizarTexto(ClienteLinea1),
                                                        FiscalizarTexto(ClienteLinea2),
                                                        FiscalizarTexto(ClienteTipoDoc),
                                                        FiscalizarTexto(ClienteNumDoc),
                                                        "N",
                                                        FiscalizarTexto(Domicilio),
                                                        FiscalizarTexto(ClienteLocalidad),
                                                        "",
                                                        FiscalizarTexto(TextoRemitoLinea1),
                                                        FiscalizarTexto(TextoRemitoLinea2),
                                                        "C");
                                        }
                                                Res = Enviar(ComandoAEnviar);
                                        
                                        break;

                                case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                        if (Comprob.Cliente.Id != 999) {
                                                //Sólo envío comando SetCustomerData (HasarDocumentoSetDatosCliente)
                                                //si el cliente NO es consumidor final
                                                string ClienteSituacionHasar = "";
                                                switch (Comprob.Cliente.SituacionTributaria.Id) {
                                                        case 1:
                                                                ClienteSituacionHasar = "C";
                                                                break;
                                                        case 2:
                                                                ClienteSituacionHasar = "I";
                                                                break;
                                                        case 3:
                                                                // No existente en los modelos SMH/P- 715F, SMH/P-PR5F, SMH/P-441F y SMH/P-451F 
                                                                ClienteSituacionHasar = "N";
                                                                break;
                                                        case 4:
                                                                // No existente en el modelo SMH/P-PR4F
                                                                ClienteSituacionHasar = "M";
                                                                break;
                                                        case 5:
                                                                ClienteSituacionHasar = "E";
                                                                break;
                                                        case 6:
                                                                ClienteSituacionHasar = "A";
                                                                break;
                                                        case 7:
                                                                ClienteSituacionHasar = "T";
                                                                break;
                                                }

                                                string TipoDocumentoClienteHasar = " ";
                                                switch (ClienteTipoDoc) {
                                                        case "CUIT":
                                                                TipoDocumentoClienteHasar = "C";
                                                                break;
                                                        case "CUIL":
                                                                TipoDocumentoClienteHasar = "L";
                                                                break;
                                                        case "LE":
                                                                TipoDocumentoClienteHasar = "0";
                                                                break;
                                                        case "LC":
                                                                TipoDocumentoClienteHasar = "1";
                                                                break;
                                                        case "DNI":
                                                                TipoDocumentoClienteHasar = "2";
                                                                break;
                                                        case "PP":
                                                                TipoDocumentoClienteHasar = "3";
                                                                break;
                                                        case "CI":
                                                                TipoDocumentoClienteHasar = "4";
                                                                break;
                                                        default:
                                                                TipoDocumentoClienteHasar = " ";// Sin clasificador
                                                                break;
                                                }

                                                string NombreClienteHasar = Comprob.Cliente.ToString();
                                                // Comando  SetCustomerData (Manual Comandos Hasar)
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoSetDatosCliente,
                                                        FiscalizarTexto(NombreClienteHasar, 30),
                                                        ClienteNumDoc,
                                                        ClienteSituacionHasar,
                                                        TipoDocumentoClienteHasar,
                                                        FiscalizarTexto(Domicilio, 40));
                                                Res = Enviar(ComandoAEnviar);
                                        }

                                        //Abrir documento   

                                        string TipoDocumentoHasar = "B";
                                        if (TipoDocumento == "D" && Letra == "A")
                                                TipoDocumentoHasar = "D";	//ND A
                                        else if (TipoDocumento == "D")
                                                TipoDocumentoHasar = "E";	//ND B Y C
                                        else if (TipoDocumento == "F" && Letra == "A")
                                                TipoDocumentoHasar = "A";	//Fac A
                                        else if (TipoDocumento == "F")
                                                TipoDocumentoHasar = "B";	//Fac B y C
                                        else if (TipoDocumento == "T")
                                                TipoDocumentoHasar = "T";	//Ticket


                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) {
                                                string NombreFantasiaHasar = Lbl.Sys.Config.Empresa.Nombre.ToUpper();
                                                int EspaciosParaCentrado = NombreFantasiaHasar.Length;
                                                int EspaciosAIncertar;
                                                Comando EstablecerTituloTiquet;
                                                if (NombreFantasiaHasar.Length <= 20) {
                                                        if (NombreFantasiaHasar.Length >= 19) {
                                                                // El caracter especial ô indica que la imprecion debe ser con doble ancho, en dicho caso La cantidad maxima de caracteres se reduce de 40 a 20 
                                                                EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia,
                                                                "2",
                                                                'ô' + NombreFantasiaHasar);
                                                                Res = Enviar(EstablecerTituloTiquet);
                                                        }
                                                        if (NombreFantasiaHasar.Length < 19) {
                                                                EspaciosParaCentrado = (20 - NombreFantasiaHasar.Length) / 2;
                                                                EspaciosAIncertar = NombreFantasiaHasar.Length + EspaciosParaCentrado;
                                                                NombreFantasiaHasar = NombreFantasiaHasar.PadLeft(EspaciosAIncertar, ' ');
                                                                // El caracter especial ô indica que la imprecion debe ser con doble ancho, en dicho caso La cantidad maxima de caracteres se reduce de 40 a 20 
                                                                EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia,
                                                                "2",
                                                                'ô' + NombreFantasiaHasar);
                                                                Res = Enviar(EstablecerTituloTiquet);
                                                        }


                                                } else {
                                                        EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia,
                                                                        "2",
                                                                        NombreFantasiaHasar);
                                                        Res = Enviar(EstablecerTituloTiquet);

                                                }


                                                //N° de línea de encabezamiento (1-10) o cola (11-20)
                                                //0: borra encabezamiento y cola,  -1: borra encabezamiento,  -2: borra cola. 
                                                Comando EstablecerEncabezadoCola = new Comando(CodigosComandosFiscales.HasarDocumentoEstablecerEncabezadoCola,
                                                                "12",
                                                                "        Muchas gracias por su compra");
                                                Res = Enviar(EstablecerEncabezadoCola);
                                        }

                                        if (Letra == "S" || Letra == "R") {
                                                // Para notas de Crédito primero tengo que acentar los datos del comprobante original y luego abrir el documento 
                                                string ComprobanteOriginal = Comprob.ComprobanteOriginal.Nombre;
                                                string[] partes = ComprobanteOriginal.Split(new char[] { '-' });
                                                ComprobanteOriginal = partes[1];
                                                // El segundo parámetro corresponde al numero de línea donde se va a imprimir la información del comprobante original 
                                                // 0: Borra ambas líneas
                                                Comando ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCargarComprobanteOriginal, "1",
                                                          ComprobanteOriginal);
                                                Res = Enviar(ComandoEnviar);

                                                ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoNoFiscalHomologadoAbrir, Letra, "T"
                                                        );
                                                Res = Enviar(ComandoEnviar);


                                        } else {
                                                // El segundo parámetro corresponde al numero de línea donde se va a imprimir la información del comprobante original 
                                                // 0: Borra ambas líneas
                                                // Borro cualquier línea que haya quedado de una nota de crédito anterior 
                                                Comando ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCargarComprobanteOriginal, "0",
                                                          "1234");
                                                Res = Enviar(ComandoEnviar);
                                                // Comando OpenFiscalReceipt (Manual de comandos Hasar) 
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalAbrir,
                                                        TipoDocumentoHasar,
                                                        "T");
                                                Res = Enviar(ComandoAEnviar);
                                        }
                                        break;
                        }

                        if (Res.Error != ErroresFiscales.Ok) {
                                Res.Lugar = "DocumentoFiscalAbrir";
                                return Res;
                        }

                        // *** Imprimir Detalles
                        foreach (Lbl.Comprobantes.DetalleArticulo Detalle in Comprob.Articulos) {
                                string StrCodigo = Lfx.Workspace.Master.CurrentConfig.Productos.CodigoPredeterminado();

                                if (Detalle.Articulo != null) {
                                        if (StrCodigo == "id_articulo")
                                                StrCodigo = Detalle.Articulo.Id.ToString();
                                        else
                                                StrCodigo = DataBase.FieldString("SELECT " + StrCodigo + " FROM articulos WHERE id_articulo=" + Detalle.Articulo.Id.ToString());
                                }

                                if (StrCodigo.Length > 0)
                                        StrCodigo = "(" + StrCodigo + ") ";

                                decimal Cantidad = Detalle.Cantidad;
                                decimal Unitario = Detalle.UnitarioAImprimir;

                                //Si es cantidad negativa, pongo precio negativo y cantidad positiva
                                if (Cantidad < 0) {
                                        Cantidad = -Cantidad;
                                        Unitario = -Unitario;
                                }

                                string ItemNombre = Detalle.Nombre;
                                string ParametroSumaResta;
                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                                ParametroSumaResta = "M";
                                                if (Unitario < 0)
                                                        ParametroSumaResta = "R";
                                                
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalItem,
                                                        FiscalizarTexto(ItemNombre,18),
                                                        FormatearNumeroEpson(Cantidad, 3).PadLeft(8, '0'),
                                                        FormatearNumeroEpson(Math.Abs(Unitario), 2).PadLeft(9, '0'),
                                                        "0000",
                                                        ParametroSumaResta,
                                                        "00001",
                                                        "00000000",
                                                        "",
                                                        "",
                                                        "",
                                                        "0000",
                                                        "000000000000000");
                                                Res = Enviar(ComandoAEnviar);
                                                Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalSubtotal, "P", ""));
                                                break;
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ParametroSumaResta = "M";
                                                if (Unitario < 0)
                                                        ParametroSumaResta = "R";

                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalItem,
                                                        FiscalizarTexto(ItemNombre).PadRight(54).Substring(0, 54),
                                                        FormatearNumeroEpson(Cantidad, 3).PadLeft(8, '0'),
                                                        FormatearNumeroEpson(Math.Abs(Unitario), 2).PadLeft(9, '0'),
                                                        "0000",
                                                        ParametroSumaResta,
                                                        "00001",
                                                        "00000000",
                                                        "",
                                                        "",
                                                        "",
                                                        "0000",
                                                        "000000000000000");
                                                Res = Enviar(ComandoAEnviar);
                                                
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                if (Detalle.DatosSeguimiento != null && Detalle.DatosSeguimiento.Count > 0) {
                                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalTexto,
                                                                FiscalizarTexto(Detalle.DatosSeguimiento.ToString(), 50),
                                                                "0"
                                                                );
                                                        Res = Enviar(ComandoAEnviar);
                                                        if (Res.Error != ErroresFiscales.Ok) {
                                                                Res.Lugar = "DocumentoFiscalText";
                                                                return Res;
                                                        }
                                                }

                                                if (Unitario < 0) {
                                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral,
                                                                FiscalizarTexto(ItemNombre, 50),
                                                                FormatearNumeroHasar(Math.Abs(Unitario), 2),
                                                                "m",
                                                                "0",
                                                                "T");
                                                } else {
                                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalItem,
                                                                FiscalizarTexto(ItemNombre, 50),
                                                                FormatearNumeroHasar(Cantidad, 2),
                                                                FormatearNumeroHasar(Unitario, 2),
                                                                "0.0", /* IVA */
                                                                "M",
                                                                "0.0", /* Impuestos Interno s */
                                                                "0", /* Campo Display */
                                                                "B" /* Precio total o base */
                                                                );
                                                }
                                                Res = Enviar(ComandoAEnviar);
                                                break;
                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        Res.Lugar = "DocumentoFiscalItem";
                                        return Res;
                                }
                        }

                        // Calculo el total real, tomando en cuenta el redondeo y los decimales
                        if (Comprob.Descuento > 0) {
                                decimal MontoDescuento = Comprob.SubTotal * (Comprob.Descuento / 100);

                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                        "Descuento " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Descuento, 2) + "%",
                                                        FormatearNumeroEpson(MontoDescuento, 2).PadLeft(12, '0'),
                                                        "D");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral,
                                                        "Descuento " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Descuento, 2) + "%",
                                                        FormatearNumeroHasar(MontoDescuento, 2),
                                                        "m",
                                                        "0",
                                                        "T");
                                                Res = Enviar(ComandoAEnviar);
                                                break;
                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        Res.Lugar = "DocumentoFiscalPagosYDescuentos:Descuento";
                                        return Res;
                                }
                        }

                        if (Math.Abs(Comprob.TotalSinRedondeo - Comprob.Total) >= 0.001m) {
                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                        "Ajustes por Redondeo",
                                                        FormatearNumeroEpson((Comprob.Total - Comprob.TotalSinRedondeo), 2).PadLeft(12, '0'),
                                                        "D");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral,
                                                        "Ajustes por Redondeo",
                                                        FormatearNumeroHasar((Comprob.Total - Comprob.TotalSinRedondeo), 2),
                                                        "m",
                                                        "0",
                                                        "T");
                                                Res = Enviar(ComandoAEnviar);
                                                break;
                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        // Error, pero continúo
                                        // Res.Lugar = "DocumentoFiscalPagosYDescuentos:Redondeo"
                                        // If Not (OFormFiscalEstado Is Nothing) Then OFormFiscalEstado.Listo()
                                        // Return Res
                                }
                        }

                        //Recargos
                        if (Comprob.Recargo > 0) {
                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                        "Recargo " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Recargo, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesCosto) + "%",
                                                        FormatearNumeroEpson(Comprob.SubTotal * (Comprob.Recargo / 100), 2).PadLeft(12, '0'),
                                                        "R");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDevolucionesYRecargos,
                                                        "Recargo " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Recargo, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesCosto) + "%",
                                                        FormatearNumeroHasar(Comprob.SubTotal * (Comprob.Recargo / 100), 2).PadLeft(10, '0'),
                                                        "M",
                                                        "00000000000",
                                                        "0",
                                                        "T",
                                                        "B");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        Res.Lugar = "DocumentoFiscalPagosYDescuentos:Interes";
                                        return Res;
                                }
                        }

                        // Pago
                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                FiscalizarTexto(Comprob.FormaDePago.ToString(), 50),
                                                FormatearNumeroEpson(Comprob.Total, 2).PadLeft(12, '0'),
                                                "T");
                                        Res = Enviar(ComandoAEnviar);
                                        break;

                                case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalPago,
                                                FiscalizarTexto(Comprob.FormaDePago.ToString(), 50),
                                                FormatearNumeroHasar(Comprob.Total, 2),
                                                "T",
                                                "0");
                                        Res = Enviar(ComandoAEnviar);
                                        break;
                        }


                        if (Res.Error != ErroresFiscales.Ok) {
                                Res.Lugar = "DocumentoFiscalPagosYDescuentos:Pago";
                                return Res;
                        }

                        // *** Cerrar Documento
                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalCerrar, TipoDocumento, Letra, ""));
                                        break;
                                case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalCerrar, TipoDocumento, Letra, "Final"));
                                        break;

                                case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                        if (Letra == "S" || Letra == "R") {
                                                // Si es nota de credito cierro dicha nota 
                                                Res = Enviar(new Comando(CodigosComandosFiscales.HasarDocumentoNoFiscalHomologadoCerrar, "1", ""));
                                        } else {

                                                // Comando CloseFiscalReceipt (Manual de comandos hasar)
                                                Res = Enviar(new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCerrar, "1"));

                                        }
                                        break;

                        }

                        if (Res.Error != ErroresFiscales.Ok) {
                                Res.Lugar = "DocumentoFiscalCerrar";
                                return Res;
                        } else {
                                if (NotifHandler != null)
                                        NotifHandler(this, new ImpresoraEventArgs("Asentando el movimiento"));

                                IDbTransaction Trans = null;
                                try {
                                        Trans = Comprob.Connection.BeginTransaction(IsolationLevel.Serializable);

                                        // Marco la factura como impresa y numerada
                                        Comprob.Numerar(Res.NumeroComprobante, true);

                                        // Mover stock si corresponde
                                        Comprob.MoverExistencias(false);

                                        // Asentar pagos si corresponde
                                        Comprob.AsentarPago(false);

                                        Trans.Commit();
                                } catch (Exception ex) {
                                        Res = new Respuesta(ErroresFiscales.Error);
                                        Res.Mensaje = ex.ToString();
                                        if (Trans != null)
                                                Trans.Rollback();
                                }

                                if (NotifHandler != null)
                                        NotifHandler(this, new ImpresoraEventArgs("Se imprimió el comprobante"));
                                return Res;
                        }
                }
Esempio n. 32
0
                internal Lfx.Types.OperationResult AgregarFactura(int idFactura)
                {
                        Lbl.Comprobantes.Recibo Rec = this.Elemento as Lbl.Comprobantes.Recibo;
                        if (Rec.Facturas == null) {
                                Rec.Facturas = new Lbl.Comprobantes.ColeccionComprobanteImporte();
                        } else {
                                foreach (Lbl.Comprobantes.ComprobanteImporte CompImp in Rec.Facturas) {
                                        Lbl.Comprobantes.ComprobanteConArticulos Fc = CompImp.Comprobante;
                                        if (Fc.Id == idFactura)
                                                return new Lfx.Types.FailureOperationResult("La factura seleccionada ya está en la lista.");
                                }
                        }
                        Lbl.Comprobantes.ComprobanteConArticulos Fac = new Lbl.Comprobantes.ComprobanteConArticulos(Rec.Connection, idFactura);
                        Rec.Facturas.AddWithValue(Fac, Fac.ImporteImpago);

                        if (EntradaCliente.ValueInt <= 0)
                                EntradaCliente.Elemento = Fac.Cliente;

                        this.MostrarFacturas();

                        return new Lfx.Types.SuccessOperationResult();
                }
Esempio n. 33
0
                public override Lfx.Types.OperationResult Ok()
                {
                        int PV = EntradaPV.ValueInt;
                        int Desde = EntradaDesde.ValueInt;
                        int Hasta = EntradaHasta.ValueInt;
                        int Cantidad = Hasta - Desde + 1;

                        Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("Una vez anulados, los comprobantes deberán ser archivados en todas sus copias y no podrán ser rehabilitados ni reutilizados.", "¿Está seguro de que desea anular " + Cantidad.ToString() + " comprobantes?");
                        Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo;

                        if (Pregunta.ShowDialog() == DialogResult.OK) {
                                bool AnularPagos = EntradaAnularPagos.ValueInt != 0;

                                int m_Id = 0;
                                string IncluyeTipos = "";

                                switch (EntradaTipo.TextKey) {
                                        case "A":
                                                IncluyeTipos = "'FA', 'NCA', 'NDA'";
                                                break;

                                        case "B":
                                                IncluyeTipos = "'FB', 'NCB', 'NDB'";
                                                break;

                                        case "C":
                                                IncluyeTipos = "'FC', 'NCC', 'NDC'";
                                                break;

                                        case "E":
                                                IncluyeTipos = "'FE', 'NCE', 'NDE'";
                                                break;

                                        case "M":
                                                IncluyeTipos = "'FM', 'NCM', 'NDM'";
                                                break;

                                        case "T":
                                                IncluyeTipos = "'T'";
                                                break;

                                        default:
                                                IncluyeTipos = "'" + EntradaTipo.TextKey + "'";
                                                break;
                                }

                                Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Anulando comprobantes", "Se están anulando los comprobantes seleccionados.");
                                Progreso.Cancelable = true;
                                Progreso.Max = Cantidad;
                                Progreso.Begin();

                                IDbTransaction Trans = this.Connection.BeginTransaction(IsolationLevel.Serializable);
                                for (int Numero = Desde; Numero <= Hasta; Numero++) {
                                        int IdFactura = Connection.FieldInt("SELECT id_comprob FROM comprob WHERE impresa=1 AND tipo_fac IN (" + IncluyeTipos + ") AND pv=" + PV.ToString() + " AND numero=" + Numero.ToString());

                                        if (IdFactura == 0) {
                                                // Es una factura que todava no existe
                                                // Tengo que crear la factura y anularla
                                                qGen.Insert InsertarComprob = new qGen.Insert("comprob");
                                                InsertarComprob.Fields.AddWithValue("tipo_fac", "F" + EntradaTipo.TextKey);
                                                InsertarComprob.Fields.AddWithValue("id_formapago", 3);
                                                InsertarComprob.Fields.AddWithValue("id_sucursal", Lfx.Workspace.Master.CurrentConfig.Empresa.SucursalActual);
                                                InsertarComprob.Fields.AddWithValue("pv", Lfx.Types.Parsing.ParseInt(EntradaPV.Text));
                                                InsertarComprob.Fields.AddWithValue("fecha", qGen.SqlFunctions.Now);
                                                InsertarComprob.Fields.AddWithValue("id_vendedor", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
                                                InsertarComprob.Fields.AddWithValue("id_cliente", Lbl.Sys.Config.Actual.UsuarioConectado.Id);
                                                InsertarComprob.Fields.AddWithValue("obs", "Comprobante anulado antes de ser impreso.");
                                                InsertarComprob.Fields.AddWithValue("impresa", 1);
                                                InsertarComprob.Fields.AddWithValue("anulada", 1);
                                                Connection.Execute(InsertarComprob);
                                                m_Id = Connection.FieldInt("SELECT LAST_INSERT_ID()");
                                                Lbl.Comprobantes.ComprobanteConArticulos NuevoComprob = new Lbl.Comprobantes.ComprobanteConArticulos(this.Connection, m_Id);
                                                NuevoComprob.Numerar(true);
                                        } else {
                                                Lbl.Comprobantes.ComprobanteConArticulos Fac = new Lbl.Comprobantes.ComprobanteConArticulos(Connection, IdFactura);
                                                if (Fac.Anulado == false)
                                                        Fac.Anular(AnularPagos);
                                        }

                                        Progreso.Advance(1);
                                        if (Progreso.Cancelar)
                                                break;
                                }

                                Progreso.End();

                                if (Progreso.Cancelar) {
                                        Trans.Rollback();
                                        Lfx.Workspace.Master.RunTime.Toast("La operación fue cancelada.", "Aviso");
                                } else {
                                        Trans.Commit();
                                        ProximosNumeros.Clear();
                                        Lui.Forms.MessageBox.Show("Se anularon los comprobantes seleccionados. Recuerde archivar ambas copias.", "Aviso");
                                }

                                EntradaDesde.ValueInt = 0;
                                EntradaHasta.ValueInt = 0;
                                EntradaDesde.Focus();

                                return base.Ok(); 
                        } else {
                                return new Lfx.Types.FailureOperationResult("La operación fue cancelada.");
                        }
                }
Esempio n. 34
0
                private void MostrarVistaPrevia()
                {
                        int PV = EntradaPV.ValueInt;
                        int Desde = EntradaDesde.ValueInt;

                        if (EntradaHasta.ValueInt < Desde && this.ActiveControl != EntradaHasta)
                                EntradaHasta.ValueInt = Desde;

                        int Hasta = EntradaHasta.ValueInt;
                        int Cantidad = Hasta - Desde + 1;

                        string[] IncluyeTipos;

                        switch (EntradaTipo.TextKey) {
                                case "A":
                                        IncluyeTipos = new string[] { "FA", "NCA", "NDA" };
                                        break;

                                case "B":
                                        IncluyeTipos = new string[] { "FB", "NCB", "NDB" };
                                        break;

                                case "C":
                                        IncluyeTipos = new string[] { "FC", "NCC", "NDC" };
                                        break;

                                case "E":
                                        IncluyeTipos = new string[] { "FE", "NCE", "NDE" };
                                        break;

                                case "M":
                                        IncluyeTipos = new string[] { "FM", "NCM", "NDM" };
                                        break;

                                case "T":
                                        IncluyeTipos = new string[] { "T" };
                                        break;

                                default:
                                        IncluyeTipos = new string[] { EntradaTipo.TextKey };
                                        break;
                        }

                        qGen.Where WhereAnular = new qGen.Where();
                        WhereAnular.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                        WhereAnular.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, IncluyeTipos);
                        WhereAnular.AddWithValue("pv", PV);

                        if (ProximosNumeros.ContainsKey(PV) == false) {
                                qGen.Select SelProxNum = new qGen.Select("comprob");
                                SelProxNum.Fields = "MAX(numero)";
                                SelProxNum.WhereClause = WhereAnular;
                                ProximosNumeros[PV] = this.Connection.FieldInt(SelProxNum) + 1;
                        }

                        if (PV <= 0 || Desde <= 0 || Cantidad <= 0) {
                                EtiquetaAviso.Text = "El rango seleccionado no es válido.";
                                ComprobanteVistaPrevia.Visible = false;
                                ListadoFacturas.Visible = false;
                                OkButton.Visible = false;
                                return;
                        }

                        if (Desde > ProximosNumeros[PV]) {
                                EtiquetaAviso.Text = "No se puede anular el rango seleccionado porque todavía no se utilizaron los comprobantes desde el " + ProximosNumeros[PV].ToString() + " al " + (Desde - 1).ToString();
                                ComprobanteVistaPrevia.Visible = false;
                                ListadoFacturas.Visible = false;
                                OkButton.Visible = false;
                                return;
                        }

                        ComprobanteVistaPrevia.Visible = Cantidad == 1;
                        ListadoFacturas.Visible = Cantidad > 1;

                        if (Cantidad == 1) {
                                qGen.Select SelDesde = new qGen.Select("comprob");
                                SelDesde.Fields = "id_comprob";
                                SelDesde.WhereClause = WhereAnular.Clone();
                                SelDesde.WhereClause.AddWithValue("numero", Desde);

                                int IdFactura = this.Connection.FieldInt(SelDesde);

                                Lbl.Comprobantes.ComprobanteConArticulos FacturaInicial = null;
                                if (IdFactura > 0)
                                        FacturaInicial = new Lbl.Comprobantes.ComprobanteConArticulos(this.Connection, IdFactura);

                                if (FacturaInicial != null && FacturaInicial.Existe) {
                                        ComprobanteVistaPrevia.Elemento = FacturaInicial;
                                        ComprobanteVistaPrevia.ActualizarControl();
                                        ComprobanteVistaPrevia.TemporaryReadOnly = true;
                                        ComprobanteVistaPrevia.Visible = true;

                                        if (FacturaInicial.Anulado) {
                                                EtiquetaAviso.Text = "El comprobante ya fue anulado y no puede anularse nuevamente.";
                                                OkButton.Visible = false;
                                        } else {
                                                EtiquetaAviso.Text = "Recuerde que necesitar archivar todas las copias del comprobante anulado.";
                                                OkButton.Visible = true;
                                                if (FacturaInicial.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) {
                                                        EntradaAnularPagos.TextKey = "1";
                                                } else {
                                                        EntradaAnularPagos.TextKey = "0";
                                                }
                                        }
                                } else {
                                        ComprobanteVistaPrevia.Visible = false;

                                        if (Desde == ProximosNumeros[PV]) {
                                                EtiquetaAviso.Text = "El comprobante " + EntradaTipo.TextKey + " " + PV.ToString("0000") + "-" + Desde.ToString("00000000") + " aun no fue impreso, pero es el próximo en el talonario. Si lo anula, el sistema salteará dicho comprobante.";
                                                EntradaAnularPagos.TextKey = "0";
                                                OkButton.Visible = true;
                                        } else {
                                                EtiquetaAviso.Text = "El comprobante " + EntradaTipo.TextKey + " " + PV.ToString("0000") + "-" + Lfx.Types.Parsing.ParseInt(EntradaDesde.Text).ToString("00000000") + " aun no fue impreso y no puede anularse.";
                                                EntradaAnularPagos.TextKey = "0";
                                                OkButton.Visible = false;
                                        }
                                }
                        } else if (Cantidad > 1) {
                                EntradaAnularPagos.TextKey = "1";

                                qGen.Select SelComprobs = new qGen.Select("comprob");
                                SelComprobs.Fields = "*";
                                SelComprobs.WhereClause = WhereAnular.Clone();
                                SelComprobs.WhereClause.AddWithValue("numero", Desde, Hasta);

                                System.Data.DataTable TablaFacturas = this.Connection.Select(SelComprobs);
                                Lbl.Comprobantes.ColeccionComprobanteConArticulos Facturas = new Lbl.Comprobantes.ColeccionComprobanteConArticulos(this.Connection, TablaFacturas);
                                ListadoFacturas.BeginUpdate();
                                ListadoFacturas.Items.Clear();
                                foreach (Lbl.Comprobantes.ComprobanteConArticulos Fac in Facturas) {
                                        ListViewItem Itm = ListadoFacturas.Items.Add(Fac.Tipo.ToString());
                                        Itm.SubItems.Add(Fac.PV.ToString("0000") + "-" + Fac.Numero.ToString("00000000"));
                                        Itm.SubItems.Add(Fac.Fecha.ToString(Lfx.Types.Formatting.DateTime.ShortDatePattern));
                                        Itm.SubItems.Add(Fac.Cliente.ToString());
                                        Itm.SubItems.Add(Lfx.Types.Formatting.FormatCurrency(Fac.Total));
                                }
                                ListadoFacturas.EndUpdate();
                                EtiquetaAviso.Text = "Se van a anular " + Cantidad.ToString() + " comprobantes, incluyendo los que se detallan a continuación.";
                                this.OkButton.Visible = true;
                        } else {
                                EtiquetaAviso.Text = "Debe seleccionar un rango que inlcuya al menos 1 comprobante.";
                                ListadoFacturas.Items.Clear();
                                this.OkButton.Visible = false;
                        }
                }
Esempio n. 35
0
                public override void OnLoad()
                {
                        if (this.Registro != null) {
                                if (this.GetFieldValue<int>("id_banco") > 0)
                                        this.Banco = new Bancos.Banco(this.Connection, this.GetFieldValue<int>("id_banco"));
                                else
                                        this.Banco = null;

                                if (this.GetFieldValue<int>("id_concepto") > 0)
                                        this.Concepto = new Cajas.Concepto(this.Connection, this.GetFieldValue<int>("id_concepto"));
                                else
                                        this.Concepto = null;

                                if (this.GetFieldValue<int>("id_chequera") > 0)
                                        this.Chequera = new Bancos.Chequera(this.Connection, this.GetFieldValue<int>("id_chequera"));
                                else
                                        this.Chequera = null;

                                if (this.GetFieldValue<int>("id_cliente") > 0)
                                        this.Cliente = new Personas.Persona(this.Connection, this.GetFieldValue<int>("id_cliente"));
                                else
                                        this.Cliente = null;

                                if (this.GetFieldValue<int>("id_comprob") > 0)
                                        this.Factura = new Comprobantes.ComprobanteConArticulos(this.Connection, this.GetFieldValue<int>("id_comprob"));
                                else
                                        this.Factura = null;
                        }
                        base.OnLoad();
                }
Esempio n. 36
0
                private static object ExecImprimir(string comando)
                {
                        string SubComandoImprimir = Lfx.Types.Strings.GetNextToken(ref comando, " ").Trim();

                        switch (SubComandoImprimir.ToUpperInvariant()) {
                                case "COMPROBANTE":
                                case "COMPROB":
                                        int IdComprobante = Lfx.Types.Parsing.ParseInt(Lfx.Types.Strings.GetNextToken(ref comando, " "));

                                        Lfx.Types.OperationResult ResultadoImpresion;

                                        using (Lfx.Data.Connection DataBaseImprimir = Lfx.Workspace.Master.GetNewConnection("Imprimir comprobante"))
                                        using (System.Data.IDbTransaction Trans = DataBaseImprimir.BeginTransaction()) {
                                                Lbl.Comprobantes.ComprobanteConArticulos Comprob = new Lbl.Comprobantes.ComprobanteConArticulos(DataBaseImprimir, IdComprobante);
                                                Lazaro.Impresion.Comprobantes.ImpresorComprobanteConArticulos Impresor = new Impresion.Comprobantes.ImpresorComprobanteConArticulos(Comprob, Trans);
                                                ResultadoImpresion = Impresor.Imprimir();
                                                if (ResultadoImpresion.Success)
                                                        Trans.Commit();
                                                else
                                                        Trans.Rollback();
                                        }

                                        return ResultadoImpresion;
                                default:
                                        int itemId = Lfx.Types.Parsing.ParseInt(Lfx.Types.Strings.GetNextToken(ref comando, " ").Trim());
                                        Type TipoElem = Lbl.Instanciador.InferirTipo(SubComandoImprimir);
                                        if (TipoElem != null && itemId > 0) {
                                                using (Lfx.Data.Connection DbImprimir = Lfx.Workspace.Master.GetNewConnection("Imprimir " + TipoElem.ToString() + " " + itemId.ToString())) {
                                                        Lbl.IElementoDeDatos Elem = Lbl.Instanciador.Instanciar(TipoElem, DbImprimir, itemId);
                                                        Lfx.Types.OperationResult Res;
                                                        using (System.Data.IDbTransaction Trans = DbImprimir.BeginTransaction()) {
                                                                Lazaro.Impresion.ImpresorElemento Impresor = Lazaro.Impresion.Instanciador.InstanciarImpresor(Elem, Trans);

                                                                string ImprimirEn = Lfx.Types.Strings.GetNextToken(ref comando, " ").Trim().ToUpperInvariant();
                                                                if (ImprimirEn == "EN") {
                                                                        // El nombre de la impresora es lo que resta del comando
                                                                        // No lo puedo separar con GetNextToken porque puede contener espacios
                                                                        string NombreImpresora = comando;
                                                                        Impresor.Impresora = Lbl.Impresion.Impresora.InstanciarImpresoraLocal(DbImprimir, NombreImpresora);
                                                                }

                                                                Res = Impresor.Imprimir();
                                                                if (Res.Success) {
                                                                        Trans.Commit();
                                                                } else {
                                                                        Trans.Rollback();
                                                                }
                                                        }
                                                        return Res;
                                                }
                                        }
                                        break;
                        }

                        return null;
                }