public override Lfx.Types.OperationResult BeforePrint() { Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Comprob.Articulos.Count >= 1 && (Comprob.Articulos[0].Cantidad < 0 || Comprob.Articulos[0].ImporteUnitario < 0)) { return(new Lfx.Types.FailureOperationResult("El primer ítem de la factura no puede ser negativo. Utilice los ítem negativos en último lugar.")); } Comprob.Cliente.Cargar(); if (Comprob.FormaDePago == null) { return(new Lfx.Types.FailureOperationResult("Por favor seleccione la forma de pago.")); } if (Comprob.Cliente == null) { return(new Lfx.Types.FailureOperationResult("Por favor seleccione un cliente.")); } if (Comprob.Tipo == null) { return(new Lfx.Types.FailureOperationResult("Por favor seleccione el tipo de comprobante.")); } if (Lbl.Sys.Config.Pais.Id == 1) { // Verificaciones especiales para Argentina if (Comprob.Tipo.EsFacturaNCoND && Comprob.Cliente.SituacionTributaria != null && Comprob.Tipo.Letra != Comprob.Cliente.LetraPredeterminada()) { Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog(@"La situación tributaria del cliente y el tipo de comprobante no se corresponden. Un cliente " + Comprob.Cliente.SituacionTributaria.ToString() + @" debería llevar un comprobante tipo " + Comprob.Cliente.LetraPredeterminada() + @". No debería continuar con la impresión. ¿Desea continuar de todos modos?", "Tipo de comprobante incorrecto"); Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (Pregunta.ShowDialog() == DialogResult.Cancel) { return(new Lfx.Types.FailureOperationResult("Corrija la situación tributaria del cliente o el tipo de comprobante.")); } } if (Comprob.Tipo.Letra.ToUpperInvariant() == "A") { if (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false) { return(new Lfx.Types.FailureOperationResult("El cliente no tiene una CUIT válida. Por favor edite el cliente y escriba una CUIT válida.")); } } else if (Comprob.Tipo.Letra == "B") { //Si es factura B de más de $ 1000, debe llevar el Nº de DNI if (Comprob.Total >= 1000 && Comprob.Cliente.NumeroDocumento.Length < 5 && (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false)) { return(new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el número de DNI/CUIT del cliente.")); } //Si es factura B de más de $ 1000, debe llevar domicilio if (Comprob.Total >= 1000 && Comprob.Cliente.Domicilio.Length < 1) { return(new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el domicilio del cliente.")); } } } if (EntradaProductos.MostrarExistencias && this.Tipo.MueveExistencias < 0 && Comprob.HayExistencias() == false) { Lui.Forms.YesNoDialog OPregunta = new Lui.Forms.YesNoDialog("Las existencias actuales no son suficientes para cubrir la operación que intenta realizar.\n¿Desea continuar de todos modos?", "No hay existencias suficientes"); OPregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (OPregunta.ShowDialog() == DialogResult.Cancel) { return(new Lfx.Types.FailureOperationResult("No se imprimir el comprobante por falta de existencias.")); } } if (Comprob.Cliente.Id != 999 && (Comprob.Tipo.EsFactura || Comprob.Tipo.EsNotaDebito)) { decimal SaldoCtaCte = Comprob.Cliente.CuentaCorriente.ObtenerSaldo(false); if (Comprob.FormaDePago != null && Comprob.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { decimal LimiteCredito = Comprob.Cliente.LimiteCredito; if (LimiteCredito == 0) { LimiteCredito = Lfx.Types.Parsing.ParseCurrency(Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting <string>("Sistema.Cuentas.LimiteCreditoPredet", "0")); } if (LimiteCredito != 0 && (Comprob.Total + SaldoCtaCte) > LimiteCredito) { return(new Lfx.Types.FailureOperationResult("El valor de la factura y/o el saldo en cuenta corriente supera el límite de crédito de este cliente.")); } } else { if (SaldoCtaCte < 0) { using (SaldoEnCuentaCorriente FormularioError = new SaldoEnCuentaCorriente()) { switch (FormularioError.ShowDialog()) { case DialogResult.Yes: //Corregir el problema this.EntradaFormaPago.ValueInt = 3; this.Save(); Comprob.FormaDePago.Tipo = Lbl.Pagos.TiposFormasDePago.CuentaCorriente; break; case DialogResult.No: //Continuar. No corregir el problema. break; default: //Cancelar y volver a la edición. return(new Lfx.Types.CancelOperationResult()); } } } } } if (Comprob.PV < 1) { return(new Lfx.Types.FailureOperationResult("Por favor escriba un punto de venta válido.")); } if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) { // No existe el PV... vacío la caché antes intentar de nuevo y dar un error Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.Clear(); if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) { return(new Lfx.Types.FailureOperationResult("El punto de venta no existe. Si desea definir un nuevo punto de venta, utilice el menú Comprobantes -> Tablas -> Puntos de venta.")); } } Lbl.Comprobantes.PuntoDeVenta Pv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV]; if (Pv.Tipo == Lbl.Comprobantes.TipoPv.Talonario) { Lbl.Impresion.Impresora Impresora = Comprob.ObtenerImpresora(); if (Pv.CargaManual && (Impresora == null || Impresora.CargaPapel == Lbl.Impresion.CargasPapel.Automatica)) { Lui.Printing.ManualFeedDialog FormularioCargaManual = new Lui.Printing.ManualFeedDialog(); FormularioCargaManual.DocumentName = Comprob.Tipo.ToString() + " " + Comprob.PV.ToString("0000") + "-" + Lbl.Comprobantes.Numerador.ProximoNumero(Comprob).ToString("00000000"); // Muestro el nombre de la impresora if (Impresora != null) { FormularioCargaManual.PrinterName = Impresora.Nombre; } else { System.Drawing.Printing.PrinterSettings objPrint = new System.Drawing.Printing.PrinterSettings(); FormularioCargaManual.PrinterName = objPrint.PrinterName; } if (FormularioCargaManual.ShowDialog() == DialogResult.Cancel) { return(new Lfx.Types.CancelOperationResult()); } } } if (Comprob.Tipo.MueveExistencias != 0) { Lfx.Types.OperationResult Res = Comprob.VerificarSeries(); if (Res.Success == false) { return(Res); } } return(base.BeforePrint()); }
public override Lfx.Types.OperationResult BeforePrint() { Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Comprob.Articulos.Count >= 1 && (Comprob.Articulos[0].Cantidad < 0 || Comprob.Articulos[0].Unitario < 0)) return new Lfx.Types.OperationResult(false, "El primer ítem de la factura no puede ser negativo. Utilice los ítem negativos en último lugar."); Comprob.Cliente.Cargar(); if (Comprob.FormaDePago == null) return new Lfx.Types.FailureOperationResult("Por favor seleccione la forma de pago."); if (Comprob.Cliente == null) return new Lfx.Types.FailureOperationResult("Por favor seleccione un cliente."); if (Comprob.Tipo == null) return new Lfx.Types.FailureOperationResult("Por favor seleccione el tipo de comprobante."); if (Lbl.Sys.Config.Pais.Id == 1) { // Verificaciones especiales para Argentina if (Comprob.Tipo.EsFacturaNCoND && Comprob.Cliente.SituacionTributaria != null && Comprob.Tipo.Letra != Comprob.Cliente.LetraPredeterminada()) { Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog(@"La situación tributaria del cliente y el tipo de comprobante no se corresponden. Un cliente " + Comprob.Cliente.SituacionTributaria.ToString() + @" debería llevar un comprobante tipo " + Comprob.Cliente.LetraPredeterminada() + @". No debería continuar con la impresión. ¿Desea continuar de todos modos?", "Tipo de comprobante incorrecto"); Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (Pregunta.ShowDialog() == DialogResult.Cancel) return new Lfx.Types.FailureOperationResult("Corrija la situación tributaria del cliente o el tipo de comprobante."); } if (Comprob.Tipo.Letra.ToUpperInvariant() == "A") { if (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false) return new Lfx.Types.FailureOperationResult("El cliente no tiene una CUIT válida. Por favor edite el cliente y escriba una CUIT válida."); } else if (Comprob.Tipo.Letra == "B") { //Si es factura B de más de $ 1000, debe llevar el Nº de DNI if (Comprob.Total >= 1000 && Comprob.Cliente.NumeroDocumento.Length < 5 && (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false)) return new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el número de DNI/CUIT del cliente."); //Si es factura B de más de $ 1000, debe llevar domicilio if (Comprob.Total >= 1000 && Comprob.Cliente.Domicilio.Length < 1) return new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el domicilio del cliente."); } } if (EntradaProductos.ShowStock && this.Tipo.MueveExistencias < 0 && Comprob.HayExistencias() == false) { Lui.Forms.YesNoDialog OPregunta = new Lui.Forms.YesNoDialog("Las existencias actuales no son suficientes para cubrir la operación que intenta realizar.\n¿Desea continuar de todos modos?", "No hay existencias suficientes"); OPregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (OPregunta.ShowDialog() == DialogResult.Cancel) return new Lfx.Types.FailureOperationResult("No se imprimir el comprobante por falta de existencias."); } if (Comprob.Cliente.Id != 999 && (Comprob.Tipo.EsFactura || Comprob.Tipo.EsNotaDebito)) { decimal SaldoCtaCte = Comprob.Cliente.CuentaCorriente.ObtenerSaldo(false); if (Comprob.FormaDePago != null && Comprob.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { decimal LimiteCredito = Comprob.Cliente.LimiteCredito; if (LimiteCredito == 0) LimiteCredito = Lfx.Types.Parsing.ParseCurrency(Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting<string>("Sistema.Cuentas.LimiteCreditoPredet", "0")); if (LimiteCredito != 0 && (Comprob.Total + SaldoCtaCte) > LimiteCredito) return new Lfx.Types.FailureOperationResult("El valor de la factura y/o el saldo en cuenta corriente supera el límite de crédito de este cliente."); } else { if (SaldoCtaCte < 0) { using (SaldoEnCuentaCorriente FormularioError = new SaldoEnCuentaCorriente()) { switch (FormularioError.ShowDialog()) { case DialogResult.Yes: //Corregir el problema this.EntradaFormaPago.ValueInt = 3; this.Save(); Comprob.FormaDePago.Tipo = Lbl.Pagos.TiposFormasDePago.CuentaCorriente; break; case DialogResult.No: //Continuar. No corregir el problema. break; default: //Cancelar y volver a la edición. return new Lfx.Types.OperationResult(false); } } } } } if (Comprob.PV < 1) return new Lfx.Types.FailureOperationResult("Por favor escriba un punto de venta válido."); if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) { // No existe el PV... vacío la caché antes intentar de nuevo y dar un error Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.Clear(); if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) return new Lfx.Types.FailureOperationResult("El punto de venta no existe. Si desea definir un nuevo punto de venta, utilice el menú Comprobantes -> Tablas -> Puntos de venta."); } Lbl.Comprobantes.PuntoDeVenta Pv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV]; if (Pv.Tipo == Lbl.Comprobantes.TipoPv.Normal) { Lbl.Impresion.Impresora Impresora = Comprob.ObtenerImpresora(); if (Pv.CargaManual && (Impresora == null || Impresora.CargaPapel == Lbl.Impresion.CargasPapel.Automatica)) { Lui.Printing.ManualFeedDialog FormularioCargaManual = new Lui.Printing.ManualFeedDialog(); FormularioCargaManual.DocumentName = Comprob.Tipo.ToString() + " " + Comprob.PV.ToString("0000") + "-" + Lbl.Comprobantes.Numerador.ProximoNumero(Comprob).ToString("00000000"); // Muestro el nombre de la impresora if (Impresora != null) { FormularioCargaManual.PrinterName = Impresora.Nombre; } else { System.Drawing.Printing.PrinterSettings objPrint = new System.Drawing.Printing.PrinterSettings(); FormularioCargaManual.PrinterName = objPrint.PrinterName; } if (FormularioCargaManual.ShowDialog() == DialogResult.Cancel) return new Lfx.Types.CancelOperationResult(); } } if (Comprob.Tipo.MueveExistencias != 0) { Lfx.Types.OperationResult Res = Comprob.VerificarSeries(); if (Res.Success == false) return Res; } return base.BeforePrint(); }