private void GuardarFactura(Pago.Pago pago)
        {
            var _dsctoGlobalPorct = pago.DescuentoPorct;
            var _dsctoGlobalMonto = pago.Descuento;
            var _cargoGlobalMonto = 0.0m;
            var _cargoGlobalPorct = 0.0m;
            var _montoDivisa      = pago.MontoPagarDivisa;
            var _montoTotal       = pago.MontoPagar;
            var _cambioDar        = pago.MontoCambioDar_MonedaNacional;
            var _montoRecibido    = pago.MontoRecibido;
            var _isCredito        = pago.IsCredito ? "S" : "N";
            var _saldoPendiente   = pago.IsCredito ? pago.MontoPagar: 0.0m;
            var _tipoDocumento    = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.Factura;
            var _signo            = 1;
            var _aplica           = "";
            var _serie            = _series.ParaFactura;
            var _control          = _series.ControlParaFactura;
            var _correlativo      = _series.CorrelativoParaFactura + 1;
            var _condicionPago    = pago.IsCredito ? "CREDITO" : "CONTADO";
            var _documentoNombre  = "FACTURA";
            var _autoConceptoMv   = _movConceptoInv.Venta.Auto;
            var _codigoConceptoMv = _movConceptoInv.Venta.Codigo;
            var _nombreConceptoMv = _movConceptoInv.Venta.Nombre;


            if (_modoFuncion == Enumerados.EnumModoFuncion.NotaCredito)
            {
                _cambioDar        = 0.0m;
                _montoRecibido    = 0.0m;
                _aplica           = _documentoVenta.Documento;
                _tipoDocumento    = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.NotaCredito;
                _signo            = -1;
                _serie            = _series.ParaNotaCredito;
                _control          = _series.ControlParaNotaCredito;
                _correlativo      = _series.CorrelativoParaNtCredito + 1;
                _documentoNombre  = "NOTA CREDITO";
                _autoConceptoMv   = _movConceptoInv.DevVenta.Auto;
                _codigoConceptoMv = _movConceptoInv.DevVenta.Codigo;
                _nombreConceptoMv = _movConceptoInv.DevVenta.Nombre;
            }

            _ctrItem.setDescuentoGlobal(_dsctoGlobalPorct);
            _ctrItem.setCargoGlobal(_cargoGlobalPorct);


            var rt1 = Sistema.MyData2.Jornada_Activa();

            if (rt1.Result == OOB.Enumerados.EnumResult.isError)
            {
                Helpers.Msg.Error(rt1.Mensaje);
                return;
            }
            if (rt1.Entidad == -1)
            {
                var msg = "PROBLEMA AL GRABAR FACTURA" +
                          Environment.NewLine +
                          "DEJA LA FACTURA EN PENDIENTE" +
                          Environment.NewLine +
                          "SAL DEL SISTEMA (POS) Y VUELVE A INTENTAR" +
                          Environment.NewLine +
                          "AL PARECER HABIA OTRA INSTANCIA DEL SISTEMA ABIERTA";
                Helpers.Msg.Error(msg);
                return;
            }
            var rt2 = Sistema.MyData2.Operador_Activo();

            if (rt2.Result == OOB.Enumerados.EnumResult.isError)
            {
                Helpers.Msg.Error(rt2.Mensaje);
                return;
            }
            if (rt1.Entidad == -1)
            {
                var msg = "PROBLEMA AL GRABAR FACTURA" +
                          Environment.NewLine +
                          "DEJA LA FACTURA EN PENDIENTE" +
                          Environment.NewLine +
                          "SAL DEL SISTEMA (POS) Y VUELVE A INTENTAR" +
                          Environment.NewLine +
                          "AL PARECER HABIA OTRA INSTANCIA DEL SISTEMA ABIERTA";
                Helpers.Msg.Error(msg);
                return;
            }

            var ficha = new OOB.LibVenta.PosOffline.VentaDocumento.Agregar()
            {
                //IdJornada =Sistema.MyJornada.Id,
                //IdOperador=Sistema.MyOperador.Id,

                IdJornada                = rt1.Entidad,
                IdOperador               = rt2.Entidad,
                Aplica                   = _aplica,
                AutoUsuario              = _usuario.Auto,
                ClienteId                = _ctrCliente.Ficha.Id,
                ClienteCiRif             = _ctrCliente.Ficha.CiRif,
                ClienteDirFiscal         = _ctrCliente.Ficha.DirFiscal,
                ClienteNombreRazonSocial = _ctrCliente.Ficha.NombreRazaonSocial,
                ClienteTelefono          = _ctrCliente.Ficha.Telefono,
                Control                  = _control,
                Documento                = _correlativo.ToString().Trim().PadLeft(10, '0'),
                Estacion                 = Environment.MachineName,
                FactorCambio             = TasaCambio,
                IsDocumentoActivo        = true,
                MontoBase                = _ctrItem.MontoBase,
                MontoBase_1              = _ctrItem.MontoBaseX("1"),
                MontoBase_2              = _ctrItem.MontoBaseX("2"),
                MontoBase_3              = _ctrItem.MontoBaseX("3"),
                MontoCargo_1             = _cargoGlobalMonto,
                MontoCostoVenta          = _ctrItem.MontoCostoVenta,
                MontoDescuento_1         = _dsctoGlobalMonto,
                MontoDescuento_2         = 0.0m,
                MontoDivisa              = _montoDivisa,
                MontoExento              = _ctrItem.MontoExento,
                MontoImpuesto            = _ctrItem.MontoImpuesto,
                MontoIva_1               = _ctrItem.MontoIvaX("1"),
                MontoIva_2               = _ctrItem.MontoIvaX("2"),
                MontoIva_3               = _ctrItem.MontoIvaX("3"),
                MontoSubTotal            = _ctrItem.MontoTotal,
                MontoSubTotalImpuesto    = _ctrItem.MontoImpuesto,
                MontoSubTotalNeto        = _ctrItem.SubTotalNeto,
                MontoTotal               = _montoTotal,
                MontoUtilidad            = _ctrItem.UtilidadNetaMonto,
                MontoVentaNeta           = _ctrItem.MontoVentaNeto,
                PorcCargo_1              = _cargoGlobalPorct,
                PorcDescuento_1          = _dsctoGlobalPorct,
                PorcDescuento_2          = 0.0m,
                PorcUtilidad             = _ctrItem.UtilidadNetaPorct,
                Renglones                = _ctrItem.Renglones,
                Serie               = _serie,
                SignoDocumento      = _signo,
                TasaIva_1           = _fiscal.Tasa1,
                TasaIva_2           = _fiscal.Tasa2,
                TasaIva_3           = _fiscal.Tasa3,
                TipoDocumento       = _tipoDocumento,
                UsuarioCodigo       = _usuario.Codigo,
                UsuarioDescripcion  = _usuario.Descripcion,
                CodioSucursal       = CodigoSucursal,
                PrefijoSucursal     = PrefijoSucursal,
                AutoDeposito        = _deposito.Auto,
                CodigoDeposito      = _deposito.Codigo,
                DescripcionDeposito = _deposito.Descripcion,
                AutoVendedor        = _vendedor.Auto,
                CodigoVendedor      = _vendedor.Codigo,
                NombreVendedor      = _vendedor.Nombre,
                AutoCobrador        = _cobrador.Auto,
                CodigoCobrador      = _cobrador.Codigo,
                NombreCobrador      = _cobrador.Nombre,
                AutoTransporte      = _transporte.Auto,
                CodigoTransporte    = _transporte.Codigo,
                NombreTransporte    = _transporte.Nombre,
                MontoRecibido       = _montoRecibido,
                CambioDar           = _cambioDar,
                IsCredito           = _isCredito,
                Tarifa              = TarifaPrecio,
                SaldoPendiente      = _saldoPendiente,
                AutoConceptoMov     = _autoConceptoMv,
                CodigoConceptoMov   = _codigoConceptoMv,
                NombreConceptoMov   = _nombreConceptoMv,
            };


            //PARA EL TICKET
            _ticketFactura.Cliente.Limpiar();
            _ticketFactura.Cliente.cirif         = _ctrCliente.Ficha.CiRif;
            _ticketFactura.Cliente.nombre_1      = _ctrCliente.Ficha.NombreRazaonSocial;
            _ticketFactura.Cliente.dirFiscal_1   = _ctrCliente.Ficha.DirFiscal;
            _ticketFactura.Cliente.telefono_1    = _ctrCliente.Ficha.Telefono;
            _ticketFactura.Cliente.condicionpago = _condicionPago;
            _ticketFactura.Cliente.estacion      = Environment.MachineName;
            _ticketFactura.Cliente.usuario       = Sistema.Usuario.Descripcion;

            var tot   = Math.Round(ficha.MontoTotal, 2, MidpointRounding.AwayFromZero);
            var stot  = Math.Round(ficha.MontoSubTotal, 2, MidpointRounding.AwayFromZero);
            var sbtot = Math.Round(_ctrItem.SubTotal, 2, MidpointRounding.AwayFromZero);

            _ticketFactura.Documento.Limpiar();
            _ticketFactura.Documento.nombre         = _documentoNombre;
            _ticketFactura.Documento.aplicaA        = _aplica;
            _ticketFactura.Documento.numero         = ficha.Documento;
            _ticketFactura.Documento.fecha          = DateTime.Now.Date.ToShortDateString();
            _ticketFactura.Documento.hora           = DateTime.Now.ToShortTimeString();
            _ticketFactura.Documento.subtotalNeto   = "Bs " + sbtot.ToString("n2");
            _ticketFactura.Documento.subtotal       = "Bs " + stot.ToString("n2");
            _ticketFactura.Documento.total          = "Bs " + tot.ToString("n2");
            _ticketFactura.Documento.cambio         = "Bs " + ficha.CambioDar.ToString("n2");
            _ticketFactura.Documento.descuentoMonto = "Bs " + ficha.MontoDescuento_1.ToString("n2");
            _ticketFactura.Documento.descuentoPorct = ficha.PorcDescuento_1.ToString("n2").Trim() + "%";
            _ticketFactura.Documento.cargoMonto     = "Bs " + ficha.MontoCargo_1.ToString("n2");
            _ticketFactura.Documento.cargoPorct     = ficha.PorcCargo_1.ToString("n2").Trim() + "%";
            _ticketFactura.Documento.HayDescuento   = ficha.PorcDescuento_1 > 0.0m;
            _ticketFactura.Documento.HayCargo       = ficha.PorcCargo_1 > 0.0m;


            var fichaItemsEliminar = new List <OOB.LibVenta.PosOffline.VentaDocumento.AgregarItemEliminar>();
            var fichaItems         = new List <OOB.LibVenta.PosOffline.VentaDocumento.AgregarItem>();

            foreach (var rg in _ctrItem.Items)
            {
                if (_modoFuncion == Enumerados.EnumModoFuncion.Facturacion)
                {
                    var nrEliminar = new OOB.LibVenta.PosOffline.VentaDocumento.AgregarItemEliminar()
                    {
                        IdEliminar = rg.Id,
                    };
                    fichaItemsEliminar.Add(nrEliminar);
                }

                var nr = new OOB.LibVenta.PosOffline.VentaDocumento.AgregarItem()
                {
                    AutoDepartamento    = rg.AutoDepartamento,
                    AutoGrupo           = rg.AutoGrupo,
                    AutoProducto        = rg.AutoId,
                    AutoSubGrupo        = rg.AutoSubGrupo,
                    AutoTasa            = rg.AutoTasa,
                    Cantidad            = rg.Cantidad,
                    CantidadUnd         = rg.CantidadUnd,
                    Categoria           = rg.Categoria,
                    CodigoPrd           = rg.CodigoPrd,
                    CostoCompraUnd      = rg.CostoUnd,
                    CostoPromedioUnd    = rg.CostoPromUnd,
                    CostoVenta          = rg.CostoVenta,
                    Decimales           = rg.Decimales,
                    DiasEmpaqueGarantia = rg.DiasEmpaqueGarantia,
                    EmpaqueCodigo       = rg.EmpaqueCodigo,
                    EmpaqueContenido    = rg.EmpaqueContenido,
                    EmpaqueDescripcion  = rg.EmpaqueDescripcion,
                    MontoDscto_1        = 0.0m,
                    MontoDscto_2        = 0.0m,
                    MontoDscto_3        = 0.0m,
                    MontoIva            = rg.MontoIva,
                    MontoUtilidad       = rg.UtilidadNetaMonto,
                    NombrePrd           = rg.NombrePrd,
                    Notas          = "",
                    PorcDscto_1    = 0.0m,
                    PorcDscto_2    = 0.0m,
                    PorcDscto_3    = 0.0m,
                    PorctUtilidad  = rg.UtilidadNetaPorct,
                    PrecioSugerido = rg.PrecioSugerido,
                    PrecioNeto     = rg.PrecioNeto,
                    PrecioItem     = rg.PrecioItem,
                    PrecioFinal    = rg.PrecioFinalNeto,
                    PrecioUnd      = rg.PrecioFinalNeto,
                    TarifaPrecio   = rg.TarifaPrecio,
                    TasaIva        = rg.TasaIva,
                    Total          = rg.Total,
                    TotalNeto      = rg.TotalNeto,
                    TotalDescuento = rg.TotalDescuentoItem,
                    EsPesado       = rg.EsPesado,
                    TipoIva        = rg.TipoIva,
                    CostoCompra    = rg.CostoCompra,
                    CostoPromedio  = rg.CostoPromedio,
                };
                fichaItems.Add(nr);


                //PARA EL TICKET
                var it = new Ticket.DatosDocumento.Item()
                {
                    cantidad    = nr.Cantidad,
                    precio      = Math.Round(rg.PrecioFull, 2, MidpointRounding.AwayFromZero),
                    isExento    = rg.EsExento,
                    isPesado    = nr.EsPesado,
                    descripcion = nr.NombrePrd,
                    importe     = Math.Round(rg.Total, 2, MidpointRounding.AwayFromZero),
                    contenido   = rg.EmpaqueContenido,
                    empaque     = rg.EmpaqueDescripcion,
                };
                _ticketFactura.Documento.Items.Add(it);
            }
            ficha.Items         = fichaItems;
            ficha.ItemsEliminar = fichaItemsEliminar;

            var metodosPago = pago._detalle.Where(w => w.Monto > 0).Select(s =>
            {
                OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.SinDefinir;
                OOB.LibVenta.PosOffline.Configuracion.MedioCobro.Medio medio = null;
                switch (s.Modo)
                {
                case  Pago.Enumerados.ModoPago.Efectivo:
                    medio          = _medioCobro.Efectivo;
                    _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Efectivo;
                    break;

                case Pago.Enumerados.ModoPago.Divisa:
                    medio          = _medioCobro.Divisa;
                    _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Divisa;
                    break;

                case Pago.Enumerados.ModoPago.Electronico:
                    if (s.Id == 4)
                    {
                        medio          = _medioCobro.Otro;
                        _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Otros;
                        break;
                    }
                    else
                    {
                        medio          = _medioCobro.Electronico;
                        _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Electronico;
                        break;
                    }

                case Pago.Enumerados.ModoPago.Otro:
                    medio          = _medioCobro.Otro;
                    _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Otros;
                    break;
                }
                var nr = new OOB.LibVenta.PosOffline.VentaDocumento.AgregarMetodoPago()
                {
                    TipoMedioPago        = _tipoMedioPago,
                    autoMedioPago        = medio.Auto,
                    codigoMedioPago      = medio.Codigo,
                    descripcionMedioPago = medio.Descripcion,
                    Importe       = s.Importe,
                    MontoRecibido = s.MontoRecibido,
                    Tasa          = s.Tasa,
                    Lote          = s.Lote,
                    Referencia    = s.Referencia,
                };
                return(nr);
            }).ToList();

            ficha.MetodosPago = metodosPago;


            //PARA EL TICKET
            foreach (var fmp in metodosPago)
            {
                if (fmp.Tasa > 1)
                {
                    var m   = fmp.MontoRecibido * fmp.Tasa;
                    var itP = new Ticket.DatosDocumento.MedioPago()
                    {
                        descripcion = "Efectivo ($" + fmp.MontoRecibido.ToString("N0") + ")",
                        monto       = "Bs " + m.ToString("n2"),
                    };
                    _ticketFactura.Documento.MediosPago.Add(itP);
                }
                else
                {
                    var itP = new Ticket.DatosDocumento.MedioPago()
                    {
                        descripcion = fmp.descripcionMedioPago,
                        monto       = "Bs " + fmp.MontoRecibido.ToString("n2"),
                    };
                    _ticketFactura.Documento.MediosPago.Add(itP);
                }
            }

            var r01 = Sistema.MyData2.VentaDocumento_Agregar(ficha);

            if (r01.Result == OOB.Enumerados.EnumResult.isError)
            {
                Helpers.Msg.Error(r01.Mensaje);
                return;
            }
            switch (ficha.TipoDocumento)
            {
            case  OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.Factura:
                _series.IncrementaCorrelativoFactura();
                break;

            case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.NotaCredito:
                _series.IncrementaCorrelativoNtCredito();
                break;

            case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.NotaDebito:
                _series.IncrementaCorrelativoNtDebito();
                break;
            }

            _documentoProcesado = true;
            Helpers.Msg.AgregarOk();
            _modoFuncion = Enumerados.EnumModoFuncion.Facturacion;
            _ctrItem.Limpiar();
            _ctrCliente.Limpiar();
        }
Exemplo n.º 2
0
        public OOB.ResultadoId VentaDocumento_Agregar(OOB.LibVenta.PosOffline.VentaDocumento.Agregar ficha)
        {
            var rt = new OOB.ResultadoId();

            var agregarDTO = new DtoLibPosOffLine.VentaDocumento.Agregar()
            {
                IdJornada                = ficha.IdJornada,
                IdOperador               = ficha.IdOperador,
                Aplica                   = ficha.Aplica,
                AutoUsuario              = ficha.AutoUsuario,
                ClienteId                = ficha.ClienteId,
                ClienteCiRif             = ficha.ClienteCiRif,
                ClienteDirFiscal         = ficha.ClienteDirFiscal,
                ClienteNombreRazonSocial = ficha.ClienteNombreRazonSocial,
                ClienteTelefono          = ficha.ClienteTelefono,
                Control                  = ficha.Control,
                Documento                = ficha.Documento,
                Estacion                 = ficha.Estacion,
                EstatusDocumento         = ficha.IsDocumentoActivo ? 1 : 0,
                FactorCambio             = ficha.FactorCambio,
                MontoBase                = ficha.MontoBase,
                MontoBase_1              = ficha.MontoBase_1,
                MontoBase_2              = ficha.MontoBase_2,
                MontoBase_3              = ficha.MontoBase_3,
                MontoCargo_1             = ficha.MontoCargo_1,
                MontoCostoVenta          = ficha.MontoCostoVenta,
                MontoDescuento_1         = ficha.MontoDescuento_1,
                MontoDescuento_2         = ficha.MontoDescuento_2,
                MontoDivisa              = ficha.MontoDivisa,
                MontoExento              = ficha.MontoExento,
                MontoImpuesto            = ficha.MontoImpuesto,
                MontoIva_1               = ficha.MontoIva_1,
                MontoIva_2               = ficha.MontoIva_2,
                MontoIva_3               = ficha.MontoIva_3,
                MontoSubTotal            = ficha.MontoSubTotal,
                MontoSubTotalImpuesto    = ficha.MontoSubTotalImpuesto,
                MontoSubTotalNeto        = ficha.MontoSubTotalNeto,
                MontoTotal               = ficha.MontoTotal,
                MontoUtilidad            = ficha.MontoUtilidad,
                MontoVentaNeta           = ficha.MontoVentaNeta,
                PorcCargo_1              = ficha.PorcCargo_1,
                PorcDescuento_1          = ficha.PorcDescuento_1,
                PorcDescuento_2          = ficha.PorcDescuento_2,
                PorcUtilidad             = ficha.PorcUtilidad,
                Renglones                = ficha.Renglones,
                Serie               = ficha.Serie,
                SignoDocumento      = ficha.SignoDocumento,
                TasaIva_1           = ficha.TasaIva_1,
                TasaIva_2           = ficha.TasaIva_2,
                TasaIva_3           = ficha.TasaIva_3,
                TipoDocumento       = (int)ficha.TipoDocumento,
                UsuarioCodigo       = ficha.UsuarioCodigo,
                UsuarioDescripcion  = ficha.UsuarioDescripcion,
                CodigoSucursal      = ficha.CodioSucursal,
                Prefijo             = ficha.PrefijoSucursal,
                AutoDeposito        = ficha.AutoDeposito,
                CodigoDeposito      = ficha.CodigoDeposito,
                DescripcionDeposito = ficha.DescripcionDeposito,
                AutoVendedor        = ficha.AutoVendedor,
                CodigoVendedor      = ficha.CodigoVendedor,
                NombreVendedor      = ficha.NombreVendedor,
                AutoCobrador        = ficha.AutoCobrador,
                CodigoCobrador      = ficha.CodigoCobrador,
                NombreCobrador      = ficha.NombreCobrador,
                AutoTransporte      = ficha.AutoTransporte,
                CodigoTransporte    = ficha.CodigoTransporte,
                NombreTransporte    = ficha.NombreTransporte,
                MontoRecibido       = ficha.MontoRecibido,
                CambioDar           = ficha.CambioDar,
                IsCredito           = ficha.IsCredito,
                HoraEmision         = DateTime.Now.ToShortTimeString(),
                Tarifa              = ficha.Tarifa,
                SaldoPendiente      = ficha.SaldoPendiente,
                AutoConceptoMov     = ficha.AutoConceptoMov,
                CodigoConceptoMov   = ficha.CodigoConceptoMov,
                NombreConceptoMov   = ficha.NombreConceptoMov,
            };

            var agregarItemDto = ficha.Items.Select(s =>
            {
                var t = new DtoLibPosOffLine.VentaDocumento.AgregarItem()
                {
                    AutoDepartamento    = s.AutoDepartamento,
                    AutoGrupo           = s.AutoGrupo,
                    AutoProducto        = s.AutoProducto,
                    AutoSubGrupo        = s.AutoSubGrupo,
                    AutoTasa            = s.AutoTasa,
                    Cantidad            = s.Cantidad,
                    CantidadUnd         = s.CantidadUnd,
                    Categoria           = s.Categoria,
                    CodigoPrd           = s.CodigoPrd,
                    CostoCompraUnd      = s.CostoCompraUnd,
                    CostoPromedioUnd    = s.CostoPromedioUnd,
                    CostoVenta          = s.CostoVenta,
                    Decimales           = s.Decimales,
                    DiasEmpaqueGarantia = s.DiasEmpaqueGarantia,
                    EmpaqueCodigo       = s.EmpaqueCodigo,
                    EmpaqueContenido    = s.EmpaqueContenido,
                    EmpaqueDescripcion  = s.EmpaqueDescripcion,
                    MontoDscto_1        = s.MontoDscto_1,
                    MontoDscto_2        = s.MontoDscto_2,
                    MontoDscto_3        = s.MontoDscto_3,
                    MontoIva            = s.MontoIva,
                    MontoUtilidad       = s.MontoUtilidad,
                    NombrePrd           = s.NombrePrd,
                    Notas          = s.Notas,
                    PorcDscto_1    = s.PorcDscto_1,
                    PorcDscto_2    = s.PorcDscto_2,
                    PorcDscto_3    = s.PorcDscto_3,
                    PorctUtilidad  = s.PorctUtilidad,
                    PrecioFinal    = s.PrecioFinal,
                    PrecioItem     = s.PrecioItem,
                    PrecioNeto     = s.PrecioNeto,
                    PrecioSugerido = s.PrecioSugerido,
                    PrecioUnd      = s.PrecioUnd,
                    TarifaPrecio   = s.TarifaPrecio,
                    TasaIva        = s.TasaIva,
                    Total          = s.Total,
                    TotalNeto      = s.TotalNeto,
                    TotalDescuento = s.TotalDescuento,
                    EsPesado       = s.EsPesado?1:0,
                    TipoIva        = s.TipoIva,
                    CostoCompra    = s.CostoCompra,
                    CostoPromedio  = s.CostoPromedio,
                };

                return(t);
            }).ToList();

            agregarDTO.Items = agregarItemDto;


            var agregarMetodsPago = ficha.MetodosPago.Select(m =>
            {
                var _tipoMedioPago = -1;
                switch (m.TipoMedioPago)
                {
                case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Efectivo:
                    _tipoMedioPago = 1;
                    break;

                case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Divisa:
                    _tipoMedioPago = 2;
                    break;

                case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Electronico:
                    _tipoMedioPago = 3;
                    break;

                case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Otros:
                    _tipoMedioPago = 4;
                    break;
                }
                var nr = new DtoLibPosOffLine.VentaDocumento.AgregarMetodoPago()
                {
                    tipoMedioPago        = _tipoMedioPago,
                    autoMedioPago        = m.autoMedioPago,
                    codigoMedioPago      = m.codigoMedioPago,
                    descripcionMedioPago = m.descripcionMedioPago,
                    Importe       = m.Importe,
                    MontoRecibido = m.MontoRecibido,
                    Tasa          = m.Tasa,
                    Lote          = m.Lote,
                    Referencia    = m.Referencia,
                };
                return(nr);
            }).ToList();

            agregarDTO.MetodosPago = agregarMetodsPago;

            var agregarItemsEliminarDto = ficha.ItemsEliminar.Select(s =>
            {
                var nr = new DtoLibPosOffLine.VentaDocumento.AgregarItemLimpiar()
                {
                    Id = s.IdEliminar,
                };
                return(nr);
            }).ToList();

            agregarDTO.ItemsLimpiar = agregarItemsEliminarDto;


            var r01 = MyData.VentaDocumento_Agregar(agregarDTO);

            if (r01.Result == DtoLib.Enumerados.EnumResult.isError)
            {
                rt.Mensaje = r01.Mensaje;
                rt.Result  = OOB.Enumerados.EnumResult.isError;
                return(rt);
            }
            rt.Id = r01.Id;

            return(rt);
        }