public void Modificar(ClienteDto dto)
        {
            using (var context = new ModeloXCommerceContainer())
            {
                var clienteModificar = context.Personas.OfType <AccesoDatos.Cliente>()
                                       .Include(x => x.Direccion)
                                       .FirstOrDefault(x => x.Id == dto.Id);

                if (clienteModificar == null)
                {
                    throw new Exception("No se encontro el Cliente");
                }

                clienteModificar.Apellido        = dto.Apellido;
                clienteModificar.Nombre          = dto.Nombre;
                clienteModificar.Dni             = dto.Dni;
                clienteModificar.Telefono        = dto.Telefono;
                clienteModificar.Celular         = dto.Celular;
                clienteModificar.Email           = dto.Email;
                clienteModificar.Cuil            = dto.Cuil;
                clienteModificar.FechaNacimiento = dto.FechaNacimiento;
                clienteModificar.Foto            = dto.Foto;

                clienteModificar.Direccion.Calle       = dto.Calle;
                clienteModificar.Direccion.Numero      = dto.Numero;
                clienteModificar.Direccion.Piso        = dto.Piso;
                clienteModificar.Direccion.Dpto        = dto.Dpto;
                clienteModificar.Direccion.Casa        = dto.Casa;
                clienteModificar.Direccion.Lote        = dto.Lote;
                clienteModificar.Direccion.Barrio      = dto.Barrio;
                clienteModificar.Direccion.Mza         = dto.Mza;
                clienteModificar.Direccion.LocalidadId = dto.LocalidadId;

                CuentaCorrienteServicio cta = new CuentaCorrienteServicio();

                if (clienteModificar.MontoMaximoCtaCte == 0 && dto.Sobregiro > 0)
                {
                    cta.Agregar(clienteModificar.Id, dto.Sobregiro);
                }
                if (clienteModificar.MontoMaximoCtaCte > 0 && dto.Sobregiro == 0)
                {
                    cta.Eliminar(clienteModificar.Id);
                }

                if (clienteModificar.MontoMaximoCtaCte > 0 && dto.Sobregiro > 0)
                {
                    var cuenta = cta.ObtenerCorrientePorClienteId(clienteModificar.Id);
                    cuenta.Limite = dto.Sobregiro;
                    cta.ModificarPorId(cuenta);
                }
                clienteModificar.MontoMaximoCtaCte = dto.Sobregiro;
                context.SaveChanges();
            }
        }
        public long Insertar(ClienteDto dto)
        {
            using (var context = new ModeloXCommerceContainer())
            {
                var nuevoCliente = new AccesoDatos.Cliente
                {
                    Apellido          = dto.Apellido,
                    Nombre            = dto.Nombre,
                    Dni               = dto.Dni,
                    Telefono          = dto.Telefono,
                    Celular           = dto.Celular,
                    Email             = dto.Email,
                    Cuil              = dto.Cuil,
                    FechaNacimiento   = dto.FechaNacimiento,
                    Foto              = dto.Foto,
                    MontoMaximoCtaCte = dto.Sobregiro,
                    Direccion         = new Direccion
                    {
                        Calle       = dto.Calle,
                        Numero      = dto.Numero,
                        Piso        = dto.Piso,
                        Dpto        = dto.Dpto,
                        Casa        = dto.Casa,
                        Lote        = dto.Lote,
                        Barrio      = dto.Barrio,
                        Mza         = dto.Mza,
                        LocalidadId = dto.LocalidadId
                    }
                };


                context.Personas.Add(nuevoCliente);

                context.SaveChanges();
                if (nuevoCliente.MontoMaximoCtaCte > 0)
                {
                    CuentaCorrienteServicio cta = new CuentaCorrienteServicio();
                    cta.Agregar(nuevoCliente.Id, nuevoCliente.MontoMaximoCtaCte);
                }
                return(nuevoCliente.Id);
            }
        }
        public void Entregar(DeliveryDto comprobante)
        {
            using (var context = new ModeloXCommerceContainer())
            {
                var Comprobante = context.Comprobantes.OfType <AccesoDatos.ComprobanteDelivery>().FirstOrDefault(x => x.Id == comprobante.Id);
                Comprobante.EstadoPedido    = EstadoPedido.Entregado;
                Comprobante.TipoComprobante = comprobante.TipoComprobante;
                var movimiento = new MovimientoServicio();
                movimiento.GenerarMovimiento(new MovimientoDto
                {
                    Monto         = comprobante.Total,
                    CajaId        = Entidad.Entidad.CajaId,
                    ComprobanteId = comprobante.Id,
                    Fecha         = DateTime.Now,
                    TipoMovimento = TipoMovimiento.Ingreso,
                    UsuarioId     = Entidad.Entidad.UsuarioId,
                    Descripcion   = $"FC_{ Comprobante.TipoComprobante }_{ comprobante.Numero.ToString("0000") }_{ comprobante.Fecha.ToString("ddmmyyyy") }"
                });


                foreach (var item in Comprobante.DetalleComprobantes)
                {
                    if (context.Articulos.FirstOrDefault(x => x.Id == item.ArticuloId).DescuentaStock)
                    {
                        var articulo = context.Articulos.FirstOrDefault(x => x.Id == item.ArticuloId);
                        if (articulo == null)
                        {
                            throw new Exception("No se encontro la entidad");
                        }

                        articulo.Stock -= item.Cantidad;
                    }
                }

                //TODO
                MovimientoServicio m = new MovimientoServicio();

                if (comprobante.MontoEfectivo > 0)
                {
                    //GENERAR MOVIMIENTO
                    m.GenerarMovimiento(new MovimientoDto
                    {
                        CajaId        = Entidad.Entidad.CajaId,
                        ComprobanteId = comprobante.Id,
                        Fecha         = DateTime.Now,
                        Monto         = comprobante.MontoEfectivo,
                        TipoMovimento = TipoMovimiento.Ingreso,
                        Descripcion   = $"FC_{Comprobante.TipoComprobante}_{comprobante.Numero.ToString("0000")}_{comprobante.Fecha.ToString("ddmmyyyy")}",
                        UsuarioId     = Entidad.Entidad.UsuarioId
                    });
                }

                if (comprobante.MontoCtaCte > 0)
                {
                    //CUENTA CORRIENTE NO GENERA DETALLE DE CAJA AL INSTANTE(DEBE PAGAR PARA GENERARLO)
                    CuentaCorrienteServicio cta = new CuentaCorrienteServicio();
                    cta.Vender(comprobante.ClienteId, comprobante.Total);
                    OperacionServicio op = new OperacionServicio();
                    op.Agregar(new OperacionDto
                    {
                        TipoOperacion     = TipoOperacion.Venta,
                        ComprobanteId     = comprobante.Id,
                        Fecha             = DateTime.Now,
                        Monto             = comprobante.MontoCtaCte,
                        CuentaCorrienteId = cta.ObtenerCorrientePorClienteId(comprobante.ClienteId).Id
                    });
                    //GENERAR MOVIMIENTO
                    m.GenerarMovimiento(new MovimientoDto
                    {
                        CajaId        = Entidad.Entidad.CajaId,
                        ComprobanteId = comprobante.Id,
                        Fecha         = DateTime.Now,
                        Monto         = comprobante.MontoCtaCte,
                        TipoMovimento = TipoMovimiento.Ingreso,
                        Descripcion   = $"CC_{Comprobante.TipoComprobante}_{comprobante.Numero.ToString("0000")}_{comprobante.Fecha.ToString("ddmmyyyy")}",
                        UsuarioId     = Entidad.Entidad.UsuarioId
                    });
                }

                if (comprobante.MontoTarjeta > 0)
                {
                    m.GenerarMovimiento(new MovimientoDto
                    {
                        CajaId        = Entidad.Entidad.CajaId,
                        ComprobanteId = comprobante.Id,
                        Fecha         = DateTime.Now,
                        Monto         = comprobante.MontoTarjeta,
                        TipoMovimento = TipoMovimiento.Ingreso,
                        Descripcion   = $"TC_{Comprobante.TipoComprobante}_{comprobante.Numero.ToString("0000")}_{comprobante.Fecha.ToString("ddmmyyyy")}",
                        UsuarioId     = Entidad.Entidad.UsuarioId
                    });
                }

                if (comprobante.MontoCheque > 0)
                {
                    m.GenerarMovimiento(new MovimientoDto
                    {
                        CajaId        = Entidad.Entidad.CajaId,
                        ComprobanteId = comprobante.Id,
                        Fecha         = DateTime.Now,
                        Monto         = comprobante.MontoCheque,
                        TipoMovimento = TipoMovimiento.Ingreso,
                        Descripcion   = $"CH_{Comprobante.TipoComprobante}_{comprobante.Numero.ToString("0000")}_{comprobante.Fecha.ToString("ddmmyyyy")}",
                        UsuarioId     = Entidad.Entidad.UsuarioId
                    });
                }
                context.SaveChanges();
            }
        }