public DtoLib.ResultadoAuto ClienteAgregarEventual(DtoLibVenta.Cliente.AgregarEventual ficha)
        {
            var result = new DtoLib.ResultadoAuto();

            try
            {
                using (var ctx = new LibEntityVentas.libVentasEntities(_cnVenta.ConnectionString))
                {
                    using (var ts = new TransactionScope())
                    {
                        var r = ctx.Database.ExecuteSqlCommand("update sistema_contadores set a_clientes=a_clientes+1");
                        if (r == 0)
                        {
                            result.Mensaje = "PROBLEMA AL ACTUALIZAR CONTADOR DE CLIENTE";
                            result.Result  = DtoLib.Enumerados.EnumResult.isError;
                            return(result);
                        }

                        var fechaSistema = ctx.Database.SqlQuery <DateTime>("select now()").FirstOrDefault();
                        var cntCliente   = ctx.Database.SqlQuery <int>("select a_clientes from sistema_contadores").FirstOrDefault();
                        var AutoCliente  = cntCliente.ToString().Trim().PadLeft(10, '0');

                        var ent = new LibEntityVentas.clientes()
                        {
                            auto                  = AutoCliente,
                            auto_grupo            = "0000000001",
                            auto_zona             = "0000000001",
                            auto_estado           = "0000000001",
                            auto_agencia          = "0000000001",
                            auto_cobrador         = "0000000001",
                            auto_vendedor         = "0000000001",
                            auto_codigo_anticipos = "0000000001",
                            auto_codigo_cobrar    = "0000000001",
                            auto_codigo_ingresos  = "0000000001",

                            ci_rif              = ficha.CiRif,
                            razon_social        = ficha.NombreRazonSocial,
                            dir_fiscal          = ficha.DireccionFiscal,
                            telefono            = ficha.Telefono,
                            estatus             = "Activo",
                            estatus_credito     = "0",
                            categoria           = "Eventual",
                            tarifa              = " ",
                            dias_credito        = 0,
                            limite_credito      = 0,
                            doc_pendientes      = 0,
                            pais                = "VZLA",
                            fecha_alta          = fechaSistema.Date,
                            denominacion_fiscal = "No Contribuyente",

                            codigo            = "",
                            nombre            = "",
                            dir_despacho      = "",
                            contacto          = "",
                            email             = "",
                            website           = "",
                            codigo_postal     = "",
                            retencion_iva     = 0.0m,
                            retencion_islr    = 0.0m,
                            descuento         = 0.0m,
                            recargo           = 0.0m,
                            estatus_morosidad = "0",
                            estatus_lunes     = "0",
                            estatus_martes    = "0",
                            estatus_miercoles = "0",
                            estatus_jueves    = "0",
                            estatus_viernes   = "0",
                            estatus_sabado    = "0",
                            estatus_domingo   = "0",
                            fecha_baja        = new DateTime(2000, 01, 01),
                            fecha_ult_pago    = new DateTime(2000, 01, 01),
                            fecha_ult_venta   = new DateTime(2000, 01, 01),
                            anticipos         = 0.0m,
                            debitos           = 0.0m,
                            creditos          = 0.0m,
                            saldo             = 0.0m,
                            disponible        = 0.0m,
                            memo                  = "",
                            aviso                 = "",
                            cuenta                = "",
                            iban                  = "",
                            swit                  = "",
                            dir_banco             = "",
                            descuento_pronto_pago = 0.0m,
                            importe_ult_pago      = 0.0m,
                            importe_ult_venta     = 0.0m,
                            telefono2             = "",
                            fax     = "",
                            celular = "",
                            abc     = " ",
                        };
                        ctx.clientes.Add(ent);
                        ctx.SaveChanges();

                        ts.Complete();
                        result.Auto = AutoCliente;
                    }
                }
            }
            catch (DbEntityValidationException e)
            {
                var msg = "";
                foreach (var eve in e.EntityValidationErrors)
                {
                    foreach (var ve in eve.ValidationErrors)
                    {
                        msg += ve.ErrorMessage;
                    }
                }
                result.Mensaje = msg;
                result.Result  = DtoLib.Enumerados.EnumResult.isError;
            }
            catch (Exception e)
            {
                result.Mensaje = e.Message;
                result.Result  = DtoLib.Enumerados.EnumResult.isError;
            }
            return(result);
        }
        public DtoLib.ResultadoAuto VentaAgregar(DtoLibVenta.Venta.Agregar ficha)
        {
            var result = new DtoLib.ResultadoAuto();

            try
            {
                using (var ctx = new LibEntityVentas.libVentasEntities(_cnVenta.ConnectionString))
                {
                    using (var ts = new TransactionScope())
                    {
                        var r1 = ctx.Database.ExecuteSqlCommand("update sistema_contadores set a_ventas=a_ventas+1");
                        if (r1 == 0)
                        {
                            result.Mensaje = "PROBLEMA AL ACTUALIZAR CONTADOR DE VENTAS";
                            result.Result  = DtoLib.Enumerados.EnumResult.isError;
                            return(result);
                        }
                        var r2 = ctx.Database.ExecuteSqlCommand("update sistema_contadores set a_cxc=a_cxc+1");
                        if (r2 == 0)
                        {
                            result.Mensaje = "PROBLEMA AL ACTUALIZAR CONTADOR DE CXC ";
                            result.Result  = DtoLib.Enumerados.EnumResult.isError;
                            return(result);
                        }
                        var cntVenta  = ctx.Database.SqlQuery <int>("select a_ventas from sistema_contadores").FirstOrDefault();
                        var cntCxC    = ctx.Database.SqlQuery <int>("select a_cxc from sistema_contadores").FirstOrDefault();
                        var autoVenta = cntVenta.ToString().Trim().PadLeft(10, '0');
                        var autoCxC   = cntCxC.ToString().Trim().PadLeft(10, '0');

                        var autoCxcPago         = "";
                        var autoCxcRecibo       = "";
                        var autoCxcReciboNumero = "";
                        if (ficha.CondicionPago == DtoLibVenta.Venta.Enumerados.enumCondicionPago.Contado)
                        {
                            var r3 = ctx.Database.ExecuteSqlCommand("update sistema_contadores set a_cxc_recibo=a_cxc_recibo+1");
                            if (r3 == 0)
                            {
                                result.Mensaje = "PROBLEMA AL ACTUALIZAR CONTADOR DE CXC RECIBO ";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                            var r4 = ctx.Database.ExecuteSqlCommand("update sistema_contadores set a_cxc_recibo_numero=a_cxc_recibo_numero+1");
                            if (r4 == 0)
                            {
                                result.Mensaje = "PROBLEMA AL ACTUALIZAR CONTADOR DE CXC RECIBO NUMERO";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                            var r5 = ctx.Database.ExecuteSqlCommand("update sistema_contadores set a_cxc=a_cxc+1");
                            if (r5 == 0)
                            {
                                result.Mensaje = "PROBLEMA AL ACTUALIZAR CONTADOR DE CXC PAGO";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                            var cntCxcRecibo       = ctx.Database.SqlQuery <int>("select a_cxc_recibo from sistema_contadores").FirstOrDefault();
                            var cntCxcReciboNumero = ctx.Database.SqlQuery <int>("select a_cxc_recibo_numero from sistema_contadores").FirstOrDefault();
                            var cntCxcPago         = ctx.Database.SqlQuery <int>("select a_cxc from sistema_contadores").FirstOrDefault();
                            autoCxcRecibo       = cntCxcRecibo.ToString().Trim().PadLeft(10, '0');
                            autoCxcReciboNumero = cntCxcReciboNumero.ToString().Trim().PadLeft(10, '0');
                            autoCxcPago         = cntCxcPago.ToString().Trim().PadLeft(10, '0');
                        }

                        //VALORES A PROCESAR
                        var fechaSistema     = ctx.Database.SqlQuery <DateTime>("select now()").FirstOrDefault();
                        var documentoVenta   = "";
                        var fechaVencimiento = fechaSistema.AddDays(ficha.DiasCredito);

                        var entVenta = new LibEntityVentas.ventas()
                        {
                            auto                       = autoVenta,
                            documento                  = documentoVenta,
                            fecha                      = fechaSistema.Date,
                            fecha_vencimiento          = fechaVencimiento,
                            razon_social               = ficha.ClienteNombre,
                            dir_fiscal                 = ficha.ClienteDirFiscal,
                            ci_rif                     = ficha.ClienteCiRif,
                            tipo                       = ficha.DocumentoCodigo,
                            exento                     = ficha.AgregarTotales.MontoExento,
                            base1                      = ficha.AgregarTotales.MontoBase1,
                            base2                      = ficha.AgregarTotales.MontoBase2,
                            base3                      = ficha.AgregarTotales.MontoBase3,
                            impuesto1                  = ficha.AgregarTotales.MontoImp1,
                            impuesto2                  = ficha.AgregarTotales.MontoImp2,
                            impuesto3                  = ficha.AgregarTotales.MontoImp3,
                            @base                      = ficha.AgregarTotales.MontoBase,
                            impuesto                   = ficha.AgregarTotales.MontoImpuesto,
                            total                      = ficha.AgregarTotales.MontoTotal,
                            tasa1                      = ficha.AgregarTotales.Tasa1,
                            tasa2                      = ficha.AgregarTotales.Tasa2,
                            tasa3                      = ficha.AgregarTotales.Tasa3,
                            nota                       = ficha.Notas,
                            tasa_retencion_islr        = 0.0m,
                            tasa_retencion_iva         = 0.0m,
                            retencion_iva              = 0.0m,
                            retencion_islr             = 0.0m,
                            auto_cliente               = ficha.AutoCliente,
                            codigo_cliente             = ficha.ClienteCodigo,
                            mes_relacion               = ficha.MesRelacion,
                            control                    = ficha.SerialFiscal,
                            fecha_registro             = fechaSistema.Date,
                            orden_compra               = ficha.AgregarEncabezado.OrdenCompra,
                            dias                       = ficha.DiasCredito,
                            descuento1                 = ficha.AgregarTotales.DescuentoMonto_1,
                            descuento2                 = ficha.AgregarTotales.DescuentoMonto_2,
                            cargos                     = ficha.AgregarTotales.CargoMonto,
                            descuento1p                = ficha.AgregarTotales.DescuentoPorct_1,
                            descuento2p                = ficha.AgregarTotales.DescuentoPorct_2,
                            cargosp                    = ficha.AgregarTotales.CargoPorct,
                            columna                    = "1",
                            estatus_anulado            = "0",
                            aplica                     = "",
                            comprobante_retencion      = "",
                            subtotal_neto              = ficha.AgregarTotales.SubTotalNeto,
                            telefono                   = ficha.ClienteTelefono,
                            factor_cambio              = ficha.FactorCambio,
                            codigo_vendedor            = ficha.VendedorCodigo,
                            vendedor                   = ficha.VendedorNombre,
                            auto_vendedor              = ficha.AutoVendedor,
                            fecha_pedido               = ficha.AgregarEncabezado.FechaPedido,
                            pedido                     = ficha.AgregarEncabezado.Pedido,
                            condicion_pago             = ficha.CondicionPagoDescripcion,
                            usuario                    = ficha.UsuarioNombre,
                            codigo_usuario             = ficha.UsuarioCodigo,
                            codigo_sucursal            = ficha.CodigoSucursal,
                            hora                       = fechaSistema.ToShortTimeString(),
                            transporte                 = ficha.TransporteNombre,
                            codigo_transporte          = ficha.TransporteCodigo,
                            monto_divisa               = ficha.AgregarTotales.MontoDivisa,
                            despachado                 = ficha.AgregarEncabezado.DepachadoPor,
                            dir_despacho               = ficha.AgregarEncabezado.DireccionDespacho,
                            estacion                   = ficha.Estacion,
                            auto_recibo                = autoCxcRecibo,
                            recibo                     = autoCxcReciboNumero,
                            renglones                  = ficha.Renglones,
                            saldo_pendiente            = ficha.AgregarTotales.SaldoPendiente,
                            ano_relacion               = ficha.AnoRelacion,
                            comprobante_retencion_islr = "",
                            dias_validez               = 0,
                            auto_usuario               = ficha.AutoUsuario,
                            auto_transporte            = ficha.AutoTransporte,
                            situacion                  = ficha.DocumentoSituacion,
                            signo                      = ficha.DocumentoSigno,
                            serie                      = ficha.AgregarEncabezado.Serie,
                            tarifa                     = ficha.ClienteTarifa,
                            tipo_remision              = ficha.AgregarEncabezado.TipoRemision,
                            documento_remision         = ficha.AgregarEncabezado.DocumentoRemision,
                            auto_remision              = ficha.AgregarEncabezado.AutoRemision,
                            documento_nombre           = ficha.DocumentoNombre,
                            subtotal_impuesto          = ficha.AgregarTotales.MontoImpuesto,
                            subtotal                   = ficha.AgregarTotales.SubTotal,
                            auto_cxc                   = autoCxC,
                            tipo_cliente               = "",
                            planilla                   = "",
                            expediente                 = "",
                            anticipo_iva               = 0.0m,
                            terceros_iva               = 0.0m,
                            neto                       = ficha.AgregarTotales.VentaNeta,
                            costo                      = ficha.AgregarTotales.CostoVenta,
                            utilidad                   = ficha.AgregarTotales.Utilidad,
                            utilidadp                  = ficha.AgregarTotales.UtilidadPorc,
                            documento_tipo             = ficha.DocumentoTipo,
                            ci_titular                 = "",
                            nombre_titular             = "",
                            ci_beneficiario            = "",
                            nombre_beneficiario        = "",
                            clave                      = "",
                            denominacion_fiscal        = ficha.ClienteDenominacionFiscal,
                            cambio                     = ficha.CambioDar,
                            estatus_validado           = "0",
                            cierre                     = "",
                            fecha_retencion            = new DateTime(2000, 01, 01),
                            estatus_cierre_contable    = "0",
                        };
                        ctx.ventas.Add(entVenta);
                        ctx.SaveChanges();

                        var sql = @"INSERT INTO ventas_detalle (auto_documento, auto_producto, codigo, nombre, auto_departamento,
                                    auto_grupo, auto_subgrupo, auto_deposito, cantidad, empaque, precio_neto, descuento1p, descuento2p,
                                    descuento3p, descuento1, descuento2, descuento3, costo_venta, total_neto, tasa, impuesto, total,
                                    auto, estatus_anulado, fecha, tipo, deposito, signo, precio_final, auto_cliente, decimales, 
                                    contenido_empaque, cantidad_und, precio_und, costo_und, utilidad, utilidadp, precio_item, 
                                    estatus_garantia, estatus_serial, codigo_deposito, dias_garantia, detalle, precio_sugerido,
                                    auto_tasa, estatus_corte, x, y, z, corte, categoria, cobranzap, ventasp, cobranzap_vendedor,
                                    ventasp_vendedor, cobranza, ventas, cobranza_vendedor, ventas_vendedor, costo_promedio_und, 
                                    costo_compra, estatus_checked, tarifa, total_descuento, codigo_vendedor, auto_vendedor, hora) 
                                    Values ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15},
                                    {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31},
                                    {32}, {33}, {34}, {35}, {36}, {37}, {38}, {39}, {40}, {41}, {42}, {43}, {44}, {45}, {46}, {47},
                                    {48}, {49}, {50}, {51}, {52}, {53}, {54}, {55}, {56}, {57}, {58}, {59}, {60}, {61}, {62}, {63},
                                    {64}, {65}, {66})";
                        //CUERPO DEL DOCUMENTO => ITEMS
                        var item = 0;
                        foreach (var dt in ficha.AgregarCuerpo)
                        {
                            item += 1;
                            var autoItem   = item.ToString().Trim().PadLeft(10, '0');
                            var isGarantia = dt.IsGarantia ? "1" : "0";
                            var isSerial   = dt.IsSerial ? "1" : "0";

                            var vd = ctx.Database.ExecuteSqlCommand(sql, autoVenta, dt.AutoProducto, dt.CodigoPrd, dt.NombrePrd, dt.AutoDepartamento,
                                                                    dt.AutoGrupo, dt.AutoSubGrupo, dt.AutoDeposito, dt.Cantidad, dt.Empaque, dt.PrecioNeto, dt.DescuentoPorc_1,
                                                                    dt.DescuentoPorc_2, dt.DescuentoPorc_3, dt.DescuentoMonto_1, dt.DescuentoMonto_2, dt.DescuentoMonto_3,
                                                                    dt.CostoVenta, dt.TotalNeto, dt.TasaIva, dt.MontoImpuesto, dt.MontoTotal, autoItem, "0", fechaSistema.Date,
                                                                    dt.Tipo, dt.DepositoDescripcion, dt.Signo, dt.PrecioFinal, dt.AutoCliente, dt.Decimales, dt.EmpaqueContenido,
                                                                    dt.CantidadUnd, dt.PrecioUnd, dt.CostoUnd, dt.UtilidadMonto, dt.UtilidadPorc, dt.PrecioItem, isGarantia,
                                                                    isSerial, dt.DepositoCodigo, dt.DiasGarantia, dt.Notas, 0.0m, dt.AutoTasaImpuesto, "0", 0.0m, 0.0m, 0.0m, "",
                                                                    dt.Categoria, 0.0m, 0.0m, 0.0m, 0.0m, 0.0m, 0.0m, 0.0m, 0.0m, dt.CostoPromedioUnd, dt.CostoPromedioCompra,
                                                                    "1", dt.TarifaPrecio, dt.MontoDescuento, dt.VendedorCodigo, dt.AutoVendedor, fechaSistema.ToShortTimeString());
                            if (vd == 0)
                            {
                                result.Mensaje = "PROBLEMA AL REGISTRAR ITEM [ " + Environment.NewLine + dt.NombrePrd + " ]";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                        }

                        //DEPOSITO ACTUALIZAR
                        foreach (var dt in ficha.AgregarActProductoDeposito)
                        {
                            var entPrdDeposito = ctx.productos_deposito.FirstOrDefault(w =>
                                                                                       w.auto_producto == dt.AutoProducto &&
                                                                                       w.auto_deposito == dt.AutoDeposito);
                            if (entPrdDeposito == null)
                            {
                                result.Mensaje = "PROBLEMA AL ACTUALIZAR DEPOSITO";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                            entPrdDeposito.fisica     -= dt.TotalUnd;
                            entPrdDeposito.disponible -= dt.TotalUnd;
                            ctx.SaveChanges();
                        }


                        var sql2 = @"INSERT INTO productos_kardex (auto_producto,total,auto_deposito,auto_concepto,auto_documento,
                            fecha,hora,documento,modulo,entidad,signo,cantidad,cantidad_bono,cantidad_und,costo_und,estatus_anulado,
                            nota,precio_und,codigo,siglas) VALUES ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, 
                            {12}, {13}, {14}, {15},{16}, {17}, {18}, {19})";
                        //KARDEX MOV=> ITEMS
                        foreach (var dt in ficha.AgregarKardex)
                        {
                            var vk = ctx.Database.ExecuteSqlCommand(sql2, dt.AutoProducto, dt.TotalCostoVenta, dt.AutoDeposito,
                                                                    dt.AutoConcepto, autoVenta, fechaSistema.Date, fechaSistema.ToShortTimeString(), documentoVenta,
                                                                    dt.Modulo, dt.Entidad, dt.Signo, dt.Cantidad, 0.0m, dt.CantidadUnd, dt.CostoPromedioUnd, "0",
                                                                    dt.Notas, dt.PrecioUnd, dt.Codigo, dt.Siglas);
                            if (vk == 0)
                            {
                                result.Mensaje = "PROBLEMA AL REGISTRAR MOVIMIENTO KARDEX [ " + Environment.NewLine + dt.AutoProducto + " ]";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                        }
                        ;


                        //REGISTRA MOVIMIENTO DE CXC
                        var entCxC = new LibEntityVentas.cxc()
                        {
                            auto              = autoCxC,
                            c_cobranza        = 0.0m,
                            c_cobranzap       = 0.0m,
                            fecha             = fechaSistema.Date,
                            tipo_documento    = ficha.AgregarCxc.DocumentoVentaTipo, // "FAC",
                            documento         = documentoVenta,
                            fecha_vencimiento = fechaVencimiento,
                            nota              = ficha.AgregarCxc.Notas,               //"",
                            importe           = ficha.AgregarCxc.MontoImporteTotal,   //.AgregarTotales.MontoTotal,
                            acumulado         = ficha.AgregarCxc.MontoAcumulado,      // acumulado,
                            auto_cliente      = ficha.AgregarCxc.AutoCliente,         // ficha.AutoCliente,
                            cliente           = ficha.AgregarCxc.ClienteNombre,       //  ficha.ClienteNombre,
                            ci_rif            = ficha.AgregarCxc.ClienteCiRif,        // ficha.ClienteCiRif,
                            codigo_cliente    = ficha.AgregarCxc.ClienteCodigo,       //ficha.ClienteCodigo,
                            estatus_cancelado = ficha.AgregarCxc.IsCancelado?"1":"0", //  estatusCancelado,
                            resta             = ficha.AgregarCxc.MontoResta,          //resta,
                            estatus_anulado   = "0",
                            auto_documento    = autoVenta,
                            numero            = "",
                            auto_agencia      = "0000000001",
                            agencia           = "",
                            signo             = ficha.AgregarCxc.Signo,        // 1,
                            auto_vendedor     = ficha.AgregarCxc.AutoVendedor, // ficha.AutoVendedor,
                            c_departamento    = 0.0m,
                            c_ventas          = 0.0m,
                            c_ventasp         = 0.0m,
                            serie             = ficha.AgregarCxc.DocumentoVentaSerie, //  ficha.AgregarEncabezado.Serie,
                            importe_neto      = ficha.AgregarCxc.MontoImporteNeto,    //  ficha.AgregarTotales.SubTotalNeto,
                            dias              = 0,
                            castigop          = 0.0m,
                        };
                        ctx.cxc.Add(entCxC);
                        ctx.SaveChanges();


                        //SI LA FORMA DE PAGO ES CONTADO, GENERA MOVIMIENTO DE PAGO
                        if (ficha.CondicionPago == DtoLibVenta.Venta.Enumerados.enumCondicionPago.Contado)
                        {
                            var entCliente = ctx.clientes.Find(ficha.AutoCliente);
                            if (entCliente == null)
                            {
                                result.Mensaje = "PROBLEMA AL ACTUALIZAR ENTIDAD [ CLIENTE ]";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                            entCliente.fecha_ult_venta = fechaSistema;
                            ctx.SaveChanges();


                            var entCxcPago = new LibEntityVentas.cxc()
                            {
                                auto              = autoCxcPago,
                                c_cobranza        = 0.0m,
                                c_cobranzap       = 0.0m,
                                fecha             = fechaSistema.Date,
                                tipo_documento    = "PAG",               //EL PAGO HACE REFENCIA AL RECIBO GENERADO DE CXC
                                documento         = autoCxcReciboNumero, //EL PAGO HACE REFENCIA AL RECIBO GENERADO DE CXC
                                fecha_vencimiento = fechaVencimiento,
                                nota              = ficha.Notas,
                                importe           = ficha.AgregarTotales.MontoTotal,
                                acumulado         = 0,
                                auto_cliente      = ficha.AutoCliente,
                                cliente           = ficha.ClienteNombre,
                                ci_rif            = ficha.ClienteCiRif,
                                codigo_cliente    = ficha.ClienteCodigo,
                                estatus_cancelado = "0",
                                resta             = 0.0m,
                                estatus_anulado   = "0",
                                auto_documento    = autoCxcRecibo, //EL PAGO HACE REFENCIA AL RECIBO GENERADO DE CXC
                                numero            = "",
                                auto_agencia      = "0000000001",
                                agencia           = "",
                                signo             = -1,
                                auto_vendedor     = ficha.AutoVendedor,
                                c_departamento    = 0.0m,
                                c_ventas          = 0.0m,
                                c_ventasp         = 0.0m,
                                serie             = "",
                                importe_neto      = 0.0m,
                                dias              = 0,
                                castigop          = 0.0m,
                            };
                            ctx.cxc.Add(entCxcPago);
                            ctx.SaveChanges();

                            var entCxcRecibo = new LibEntityVentas.cxc_recibos()
                            {
                                auto            = autoCxcRecibo,
                                documento       = autoCxcReciboNumero,
                                fecha           = fechaSistema,
                                auto_usuario    = ficha.AutoUsuario,
                                importe         = ficha.AgregarTotales.MontoTotal,
                                usuario         = ficha.UsuarioNombre,
                                monto_recibido  = ficha.MontoRecibido,
                                cobrador        = ficha.CobradorNombre,
                                auto_cliente    = ficha.AutoCliente,
                                cliente         = ficha.ClienteNombre,
                                ci_rif          = ficha.ClienteCiRif,
                                codigo          = ficha.ClienteCodigo,
                                estatus_anulado = "0",
                                direccion       = ficha.ClienteDirFiscal,
                                telefono        = ficha.ClienteTelefono,
                                auto_cobrador   = ficha.AutoCobrador,
                                anticipos       = 0.0m,
                                cambio          = ficha.CambioDar,
                                nota            = ficha.Notas,
                                codigo_cobrador = ficha.CobradorCodigo,
                                auto_cxc        = autoCxC,
                                retenciones     = 0.0m,
                                descuentos      = 0.0m,
                                hora            = "",
                                cierre          = "",
                            };
                            ctx.cxc_recibos.Add(entCxcRecibo);
                            ctx.SaveChanges();

                            var entCxcDocumento = new LibEntityVentas.cxc_documentos()
                            {
                                id              = 1,
                                fecha           = fechaSistema.Date,
                                tipo_documento  = "FAC",
                                documento       = documentoVenta,
                                importe         = ficha.AgregarTotales.MontoTotal,
                                operacion       = "Pago",
                                auto_cxc        = autoCxC,
                                auto_cxc_pago   = autoCxcPago,
                                auto_cxc_recibo = autoCxcRecibo,
                                numero_recibo   = autoCxcReciboNumero,
                                fecha_recepcion = new DateTime(2000, 01, 01),
                                dias            = 0,
                                castigop        = 0.0m,
                                comisionp       = 0.0m,
                            };
                            ctx.cxc_documentos.Add(entCxcDocumento);
                            ctx.SaveChanges();

                            foreach (var fp in ficha.AgregarFormaPago)
                            {
                                var entCxcMedioPago = new LibEntityVentas.cxc_medio_pago()
                                {
                                    auto_recibo     = autoCxcRecibo,
                                    auto_medio_pago = fp.AutoMedioPago,
                                    auto_agencia    = fp.AutoAgencia,
                                    medio           = fp.MedioPagoDescripcion,
                                    codigo          = fp.MedioPagoCodigo,
                                    monto_recibido  = fp.MontoRecibido,
                                    fecha           = fechaSistema,
                                    estatus_anulado = "0",
                                    numero          = fp.NumeroRef,
                                    agencia         = fp.AgenciaDescripcion,
                                    auto_usuario    = ficha.AutoUsuario,
                                    lote            = fp.Lote,
                                    referencia      = fp.Referencia,
                                    auto_cobrador   = ficha.AutoCobrador,
                                    cierre          = "",
                                    fecha_agencia   = new DateTime(2001, 01, 01),
                                };
                                ctx.cxc_medio_pago.Add(entCxcMedioPago);
                                ctx.SaveChanges();
                            }
                        }
                        else
                        {
                            var entCliente = ctx.clientes.Find(ficha.AutoCliente);
                            if (entCliente == null)
                            {
                                result.Mensaje = "PROBLEMA AL ACTUALIZAR ENTIDAD [ CLIENTE ]";
                                result.Result  = DtoLib.Enumerados.EnumResult.isError;
                                return(result);
                            }
                            entCliente.fecha_ult_venta = fechaSistema;
                            entCliente.saldo          += ficha.AgregarTotales.MontoTotal;
                            entCliente.disponible     -= ficha.AgregarTotales.MontoTotal;
                            ctx.SaveChanges();
                        }

                        ts.Complete();
                        result.Auto = autoVenta;
                    }
                }
            }
            catch (DbEntityValidationException e)
            {
                var msg = "";
                foreach (var eve in e.EntityValidationErrors)
                {
                    foreach (var ve in eve.ValidationErrors)
                    {
                        msg += ve.ErrorMessage;
                    }
                }
                result.Mensaje = msg;
                result.Result  = DtoLib.Enumerados.EnumResult.isError;
            }
            catch (System.Data.Entity.Infrastructure.DbUpdateException e)
            {
                var msg = "";
                foreach (var eve in e.Entries)
                {
                    //msg += eve.m;
                    foreach (var ve in eve.CurrentValues.PropertyNames)
                    {
                        msg += ve.ToString();
                    }
                }
                result.Mensaje = msg;
                result.Result  = DtoLib.Enumerados.EnumResult.isError;
            }
            catch (Exception e)
            {
                result.Mensaje = e.Message;
                result.Result  = DtoLib.Enumerados.EnumResult.isError;
            }
            return(result);
        }