Exemplo n.º 1
0
        /// <summary>
        /// Emite una nota de credito de ejemplo a consumidor final.
        /// </summary>
        ///
        /// <remarks>
        /// Son posibles TODAS las operaciones que también son posibles para el ticket a consumidor
        /// final. Por una cuestión de brevedad, no se vuelven a demostrar acá.
        /// </remarks>
        public void NotaCreditoConsumidorFinal()
        {
            // Abre la operación.
            // Hace falta indicar que es N/C poniendo 'Tipo' en true
            var cmdO = new CMD_TKAbrir();

            cmdO.Input.TipoDoc = true;
            if (!ExecCommand(cmdO))
            {
                return;
            }

            // Envía un ítem de $12.50 (10 x $1.25)
            var cmdI = new CMD_TKItem();

            cmdI.Input.Cantidad     = 10;
            cmdI.Input.Unitario     = 1.25m;
            cmdI.Input.CondIVA      = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA      = 2100;                             // 2 decimales por default.
            cmdI.Input.CodigoMedida = CodUnidadMedida.Litros;
            cmdI.Input.Descrip      = "Aceite Patito PVC";
            ExecCommand(cmdI);

            // Cierra la nota de crédito
            var cmdC = new CMD_TKCerrar();

            ExecCommand(cmdC);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Ejemplo de ticket a consumidor final.
        /// </summary>
        ///
        /// <remarks>
        /// Se demuestran la mayor parte de las operaciones posibles:
        /// - Ventas/Anulaciones a distintos IVAS y con distintos impuestos internos.
        /// - Descuentos/Recargos/Bonificaciones por ítem.
        /// - Descuentos/Recargos globales
        /// - Otros impuestos
        /// - Ingreso de medios de cobro.
        /// - Cierre de ticket con manipulación de las líneas de pie.
        /// </remarks>
        public void TicketConsumidorFinal()
        {
            // Abre la operación.
            // TCF= No hace falta setear nada más en el comando.
            var cmdO = new CMD_TKAbrir();

            if (!ExecCommand(cmdO))
            {
                return;
            }

            // Envía un ítem de $12.50 (10 x $1.25)
            var cmdI = new CMD_TKItem();

            cmdI.Input.Cantidad       = 10;
            cmdI.Input.Unitario       = 1.25m;
            cmdI.Input.CondIVA        = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA        = 2100;                           // 2 decimales por default.
            cmdI.Input.CodigoMedida   = CodUnidadMedida.Litros;
            cmdI.Input.Descrip        = "Aceite Patito PVC";
            cmdI.Input.ItemDescExtra1 = "Inmejorable para milanesas!";
            ExecCommand(cmdI);

            // Envía un ítem que posteriormente se ANULARA
            cmdI = new CMD_TKItem();
            cmdI.Input.Unitario = 15.10m;
            cmdI.Input.Cantidad = 1;
            cmdI.Input.CondIVA  = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA  = 1050;
            cmdI.Input.Descrip  = "Renglon que anularemos";
            ExecCommand(cmdI);

            // Anula el renglón anterior. NO ES NECESARIO QUE LA ANULACIÓN sea correlativa con el
            // renglón a anular. Lo que importa es que todos los datos coincidan.
            cmdI                = new CMD_TKItem();
            cmdI.Input.Tipo     = TKI_Tipo.AnulVenta;
            cmdI.Input.Unitario = 15.10m;
            cmdI.Input.Cantidad = 1;
            cmdI.Input.CondIVA  = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA  = 1050;
            cmdI.Input.Descrip  = "Renglon que anularemos";
            ExecCommand(cmdI);

            // Prueba enviando un ítem exento de IVA
            cmdI = new CMD_TKItem();
            cmdI.Input.Unitario = 30m;
            cmdI.Input.Cantidad = 10;
            cmdI.Input.CondIVA  = CodTKItemCondIva.Exento;
            cmdI.Input.Descrip  = "Prueba producto exento";
            ExecCommand(cmdI);

            // Probamos un producto con $1.35 de impuesto interno. En estos casos, el producto debe
            // tener IVA distito de cero.
            cmdI = new CMD_TKItem();
            cmdI.Input.Unitario    = 30m;
            cmdI.Input.Cantidad    = 10;
            cmdI.Input.CondIVA     = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA     = 2100;
            cmdI.Input.ImpIntFijos = 1.35m;
            cmdI.Input.Descrip     = "ImpInt por Monto";
            ExecCommand(cmdI);

            // Ahora probamos un producto con 10% de impuesto interno.
            // El impuesto interno porcencual se codifica con 8 dígitos donde los 2 primeros son la
            // parte entera y el resto la decimal. Por ejemplo, 10% se configura 10000000 y un
            // valor de 5.374 será 5374000
            cmdI = new CMD_TKItem();
            cmdI.Input.Unitario   = 30m;
            cmdI.Input.Cantidad   = 10;
            cmdI.Input.CondIVA    = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA    = 2100;
            cmdI.Input.ImpIntPorc = 10000000m;
            cmdI.Input.Descrip    = "ImpInt por Monto";
            ExecCommand(cmdI);

            // Se pueden imprimir hasta 4 descripciones adicionales. Los datos MTX son para un posible
            // "archivo matrix" todavía no implementado por la AFIP, pero deberían ser el código EAN
            // del producto y la cantidad real de ítems EAN vendidos (Sin son kgs, por ejemplo, cuenta
            // 1 cada paquete)
            cmdI = new CMD_TKItem();
            cmdI.Input.Unitario       = 12.35m;
            cmdI.Input.Cantidad       = 1;
            cmdI.Input.CondIVA        = CodTKItemCondIva.Gravado;
            cmdI.Input.Descrip        = "Item completo";
            cmdI.Input.TasaIVA        = 2100;
            cmdI.Input.CodigoMTX      = "779779779779";
            cmdI.Input.UnidadMTX      = 13;
            cmdI.Input.ItemDescExtra1 = "Linea de Descripcion 4";
            cmdI.Input.ItemDescExtra2 = "Linea de Descripcion 3";
            cmdI.Input.ItemDescExtra3 = "Linea de Descripcion 2";
            cmdI.Input.ItemDescExtra4 = "Linea de Descripcion 1";
            ExecCommand(cmdI);

            // Los recargos sobre un ítem anterior se codifican muy parecido que un ítem de venta
            // Importante: La cantidad debe ser '1'
            cmdI                = new CMD_TKItem();
            cmdI.Input.Tipo     = TKI_Tipo.Recargo;
            cmdI.Input.Unitario = 12.35m;
            cmdI.Input.Cantidad = 1;
            cmdI.Input.CondIVA  = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA  = 2100;
            cmdI.Input.Descrip  = "Recargo de $12.35";
            ExecCommand(cmdI);

            // Los siguientes ejemplos muestran como hacer descuentos o bonificaciones sobre un ítem
            // ya vendido.
            //
            // IMPORTANTE: No se permitirá restar IVA que no se haya vendido antes.
            cmdI                = new CMD_TKItem();
            cmdI.Input.Tipo     = TKI_Tipo.Bonif;
            cmdI.Input.Unitario = 9.60m;
            cmdI.Input.Cantidad = 1;
            cmdI.Input.CondIVA  = CodTKItemCondIva.Gravado;
            cmdI.Input.TasaIVA  = 2100;
            cmdI.Input.Descrip  = "Bonificación de $9.60";
            ExecCommand(cmdI);
            cmdI.Input.Tipo     = TKI_Tipo.Descuento;
            cmdI.Input.Unitario = 11m;
            cmdI.Input.Cantidad = 1;
            cmdI.Input.Descrip  = "Descuento de $11";
            ExecCommand(cmdI);

            // Si enviamos un subtotal ANTES de entrar a la fase de descuentos/recargos globales u
            // de "otros tributos" o de medios de cobro, el subtotal podrá imprimirse. Sino, no se
            // imprimirá pero si se devolverá el total actual del ticket.
            var cmdS = new CMD_TKSubtotal();

            cmdS.Input.Print = true;
            ExecCommand(cmdS);

            // Agregamos un recargo "global". Como tal, prorratea automáticamente el IVA/Impuesto
            // interno que corresponda entre todas las tasas de IVA y de impuesto interno que se
            // hayan usado dentro de la operación.
            var cmdG = new CMD_TKDescuento();

            cmdG.Input.Tipo    = TKD_Tipo.Recargo;
            cmdG.Input.Monto   = 25.50m;
            cmdG.Input.Descrip = "Recargo de prueba de $25";
            ExecCommand(cmdG);

            // Ahora hacemos un descuento global. Igual que en el recargo global, los impuestos
            // se prorratean automáticamente.
            cmdG               = new CMD_TKDescuento();
            cmdG.Input.Tipo    = TKD_Tipo.Descuento;
            cmdG.Input.Monto   = 13.33m;
            cmdG.Input.Descrip = "Descuento de prueba de $13.33";
            ExecCommand(cmdG);

            // Como muestra de los "otros impuestos", agregamos una percepción de ingresos brutos
            var cmdOT = new CMD_TKOtroTributo();

            cmdOT.Input.Descrip = "Percepción IIBB de $7.30";
            cmdOT.Input.Monto   = 7.30m;
            cmdOT.Input.TasaIVA = 2100;
            cmdOT.Input.Tipo    = TKOT_Tipo.ImpIngBrutos;
            ExecCommand(cmdOT);

            // Mandamos otro subtotal. Este no se imprimirá nunca pero sirve, por ejemplo, para
            // capturar el total final de la operación. Lo usaremos en este ejemplo, posteriormente,
            // para imprimir un código EAN al pie del ticket con el total.
            ExecCommand(cmdS);
            var totalTkt = cmdS.Output.Monto;

            // Ingresando ya a la sección de pagos, registramos un pago parcial de $120 con tarjeta
            // de crédito.
            var cmdP = new CMD_TKPago();

            cmdP.Input.Codigo         = CodMedioDePago.Tarjeta_de_credito;
            cmdP.Input.Cuotas         = 3;
            cmdP.Input.DetaAdic       = "Mastercard Bco. Galicia";
            cmdP.Input.DetaCupon      = "1321";
            cmdP.Input.Monto          = 100m;
            cmdP.Input.PagoDescExtra1 = "Plan 'Paga como quieras'";
            cmdP.Input.PagoDescExtra2 = "www.mastercard.com.ar";
            ExecCommand(cmdP);

            // Completamos con otro medio de pago que incluso nos genera el vuelto.
            // IMPORTANTE: Si los medios de pago no llegaran a completar la operación, el comando
            // de cierre de operación "completará" la operación con un ingreso automático de
            // efectivo.
            cmdP = new CMD_TKPago();
            cmdP.Input.Codigo = CodMedioDePago.Efectivo;
            cmdP.Input.Monto  = 1000m;
            ExecCommand(cmdP);

            // Cierra el ticket. Observa como se reemplaza una de la línea nro 5 del pié de ticket
            // por un código de barra EAN con el total del ticket.
            var cmdC = new CMD_TKCerrar();

            cmdC.Input.RNumLinea1  = 5;
            cmdC.Input.RTextLinea1 = "\\cc2501" + ((int)totalTkt).ToString().PadLeft(8, '0');
            ExecCommand(cmdC);
        }