private void btnAceptar_Click(object sender, RoutedEventArgs e) { if (IsInteger(txtNumeroCaja.Text)) { if (txtNombreCajero.Text.Trim() != "") { //Agrego la caja en cuestion var _db = new LineaSupermercadoContext(); int numeroCaja = Convert.ToInt32(txtNumeroCaja.Text.ToString()); int cantCajas = _db.Cajas.Where(x => x.NumeroCaja == numeroCaja).Count(); if (cantCajas == 0) { Caja caja = new Caja(); caja.NumeroCaja = Convert.ToInt32(txtNumeroCaja.Text.ToString()); caja.Cajero = txtNombreCajero.Text; _db.Cajas.Add(caja); _db.SaveChanges(); DialogResult = true; } else { MessageBox.Show("El numero de caja ya existe"); } } else { MessageBox.Show("El nombre del cajero no puede estar vacio"); } } else { MessageBox.Show("El numero de caja es incorrecto"); } }
private void btnAceptar_Click(object sender, RoutedEventArgs e) { if (txtNombreCliente.Text.Trim() != "") { var _db = new LineaSupermercadoContext(); var cajaConMenosClientes = (from caj in _db.Cajas join ccli in _db.CajaCliente on caj.ID equals ccli.IDCaja into cli from ccli in cli.DefaultIfEmpty() select new { IDCaja = caj.ID, NumeroCaja = caj.NumeroCaja, ClientesSinAtender = (ccli == null) ? 0 : cli.Where(x => x.Estado == 0).Count() } ).GroupBy(x => new { x.IDCaja, x.NumeroCaja, x.ClientesSinAtender }).OrderBy(x => new { x.Key.ClientesSinAtender, x.Key.NumeroCaja }).First(); //Creo el cliente Cliente cliente = new Cliente(); cliente.Nombre = txtNombreCliente.Text; _db.Clientes.Add(cliente); //Lo agrego a la caja con menos clientes CajaCliente cajaCliente = new CajaCliente(); cajaCliente.IDCliente = cliente.ID; cajaCliente.IDCaja = cajaConMenosClientes.Key.IDCaja; cajaCliente.Orden = _db.CajaCliente.Where(x => x.IDCaja == cajaConMenosClientes.Key.IDCaja).Select(x => x.Orden).DefaultIfEmpty(0).Max() + 1; _db.CajaCliente.Add(cajaCliente); _db.SaveChanges(); DialogResult = true; } else { MessageBox.Show("El nombre del cliente no puede estar vacio"); } }
//Actualiza datagrid cajas private void RefreshDatagrid() { using (_db = new LineaSupermercadoContext()) { var cajas = _db.Cajas.Include("Clientes").ToList(); dgCajas.ItemsSource = cajas; } }
//Ordena los clientes de una caja private void OrdernarCaja(int NumeroCaja) { _db = new LineaSupermercadoContext(); List <CajaCliente> clientes = _db.Cajas.Include("Clientes").First(x => x.ID == NumeroCaja).Clientes.Where(x => x.Estado == 0).OrderBy(x => x.Orden).ToList(); foreach (CajaCliente cajaCli in clientes) { cajaCli.Orden = cajaCli.Orden - 1; _db.Entry(cajaCli).State = EntityState.Modified; _db.SaveChanges(); } }
//Desplaza clientes desde una caja hacia otra private void DesplazarClientes(int NumeroCajaAnt, int NumeroCajaNueva) { _db = new LineaSupermercadoContext(); List <CajaCliente> clientes = _db.Cajas.Include("Clientes").First(x => x.ID == NumeroCajaAnt).Clientes.Where(x => x.Estado == 0).OrderBy(x => x.Orden).ToList(); if (clientes.Count() > 0) { foreach (CajaCliente cajaCli in clientes) { cajaCli.IDCaja = NumeroCajaNueva; cajaCli.Orden = _db.CajaCliente.Where(x => x.IDCaja == cajaCli.IDCaja).Select(x => x.Orden).DefaultIfEmpty(0).Max() + 1; _db.Entry <CajaCliente>(cajaCli).State = EntityState.Modified; _db.SaveChanges(); } } }
//Atiendo a un cliente private void btnAtenderCliente_Click(object sender, RoutedEventArgs e) { _db = new LineaSupermercadoContext(); Caja c = (Caja)((Button)e.Source).DataContext; Caja caja = _db.Cajas.Where(x => x.ID == c.ID).Include("Clientes").First(); CajaCliente clienteAtendido = caja.Clientes.Where(x => x.Estado == 0).OrderBy(x => x.Orden).First(); clienteAtendido.Estado = 1; _db.Entry(clienteAtendido).State = EntityState.Modified; _db.SaveChanges(); Cliente cliente = _db.Clientes.Find(clienteAtendido.IDCliente); MessageBox.Show("Atendiendo al cliente: " + cliente.Nombre); //Ordeno nuevamente el conjunto de clientes OrdernarCaja(caja.ID); //Actualizo cajas RefreshDatagrid(); }
//Cierra una caja private void btnCerrarCaja_Click(object sender, RoutedEventArgs e) { try { _db = new LineaSupermercadoContext(); Caja caja = (Caja)((Button)e.Source).DataContext; bool puedeCerrarCaja = false; //Objengo total de cajas abiertas int cajasAbiertas = _db.Cajas.Count(); if (cajasAbiertas > 1) { puedeCerrarCaja = true; } else { Caja cajaAbierta = _db.Cajas.Include("Clientes").First(); if (cajaAbierta.ClientesPorAtender == 0) { puedeCerrarCaja = true; } else { MessageBox.Show("No se puede cerrar la unica caja abierta si posee clientes pendientes, debe atenderlos primero"); } } if (puedeCerrarCaja) { //Si existe mas de una caja abierta debo desplazar clientes, sino es una unica caja sin clientes por atender if (cajasAbiertas > 1) { //Obtengo la caja con menos clientes exceptuando la que voy a cerrar var cajaConMenosClientes = (from caj in _db.Cajas join ccli in _db.CajaCliente on caj.ID equals ccli.IDCaja into cli from ccli in cli.DefaultIfEmpty() where caj.ID != caja.ID select new { IDCaja = caj.ID, NumeroCaja = caj.NumeroCaja, ClientesSinAtender = (ccli == null) ? 0 : cli.Where(x => x.Estado == 0).Count() } ).GroupBy(x => new { x.IDCaja, x.NumeroCaja, x.ClientesSinAtender }).OrderBy(x => new { x.Key.ClientesSinAtender, x.Key.NumeroCaja }).First(); //Paso todos los clientes a la caja con menos clientes DesplazarClientes(caja.ID, cajaConMenosClientes.Key.IDCaja); } //Borro la caja Caja cajaDeleted = _db.Cajas.Find(caja.ID); _db.Cajas.Remove(cajaDeleted); _db.SaveChanges(); //Refresco datagrid RefreshDatagrid(); } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }