public void GuardarPedido(Elemento element) { listaproducto.Add(element); }
public void GuardarStock(Elemento stock) { _stock.Add(stock); }
public void CargarPedidosActualesPendientes() //aca se guarda en memo toda la lista pedidos { string[] pedidoslineas = null; Elemento Element; Pedido PedidoActual = new Pedido(); if (File.Exists(rutapedidodiario)) // si se crashea el programa trata de levantar la lista pedido actual { string[] lineasplit = null; int lineacabecera = 1; pedidoslineas = File.ReadAllLines(rutapedidodiario); foreach (string linea in pedidoslineas) { if (linea != string.Empty) { lineasplit = linea.Split(';'); if (lineasplit.Count() == 6) { if (lineacabecera != 1) { EmpresaInstanciada.GuardarPedido(PedidoActual); //Cuando termino de cargar el pedido a la lista lo destruyo PedidoActual = null; } else { lineacabecera = lineacabecera + 1; } //y Aca lo creo de vuelta cuando empiezo uno nuevo PedidoActual = new Pedido(); PedidoActual.codigo = lineasplit[0]; PedidoActual.comercio.codigo = lineasplit[1]; PedidoActual.comercio.razonsocial = lineasplit[2]; PedidoActual.comercio.cuit = lineasplit[3]; PedidoActual.comercio.domicilio = lineasplit[4]; PedidoActual.EnviadoLogistica = Convert.ToBoolean(lineasplit[5]); } else if (lineasplit.Count() == 2) { int cantidad = 0; if (int.TryParse(lineasplit[1], out cantidad)) { Element = new Elemento(); Element.prod.idprod = lineasplit[0]; Element.cantidad = cantidad; PedidoActual.GuardarPedido(Element); } else { throw new Exception("Error en el formato del archivo de Pedidos Pendientes,no se pudo procesar correctamente."); } } else { throw new Exception("Error en el formato del archivo de Pedidos Pendientes,no se pudo procesar correctamente."); } } } if (PedidoActual.codigo != null) { EmpresaInstanciada.GuardarPedido(PedidoActual); } } else { using (StreamWriter sw = File.CreateText(rutapedidodiario)) { sw.Flush(); } } }
private void ProcesaStock(string Ruta) //////////// STOCK SE GRABA EN MEMORIA ////////////// { int numprod; List <Elemento> listaproduccion = new List <Elemento>(); string[] lineas = null; Elemento Element; if (File.Exists(Ruta)) { lineas = File.ReadAllLines(Ruta); string[] lineasplit = null; if (lineas.Any()) { var okvalidaliena = true; foreach (string linea in lineas) { if (linea != string.Empty) { //aca empiezo a guardar cada contenido del array en el list de elementos acorde a mi stock (llamo a los objeto elemento, les pongo lo que corresponde // y luego es lo guardo en un metodo en la clase Empresa dentro de la lista Stock! voila Element = new Elemento(); lineasplit = linea.Split(';'); int cantidad = 0; if (!(lineasplit.Count() == 2) || !(lineasplit[0].Count() >= 2) || // v9.5 !(lineasplit[0].Remove(1).ToUpper() == "P") || !(lineasplit[0].Remove(0, 1).Count() >= 1) || !(lineasplit[0].Remove(0, 1).Count() < 6) || !(int.TryParse(lineasplit[0].Remove(0, 1), out numprod)) || !(numprod >= 1) || !(int.TryParse(lineasplit[1], out cantidad)) || !(cantidad > 0) || !(cantidad < 100000)) //Se puede mejorar este if como hice con "carga stock inicial". { okvalidaliena = false; throw new Exception("Error en el formato del archivo enviado por Produccion. El proceso finalizo sin cargar stock. Verifique las cantidades y el formato."); } } }//ACA TERMINA EL PRIMER FOREACH. if (okvalidaliena == true) //RECIEN ACA GUARDA EL STOCK. { foreach (string linea in lineas) //TOME EL ARRAY LINEAS (QUE TENIA LO DE LA RUTA) Y LO SEPARA EN LINEAS DE TIPO STRING. RECORRE TODAS. //LO DE MAS ABAJO SIMPLEMENTE LO COPIE DEL DE ARRIBA SIN MODIFICAR, SALVO LA VARIABLE CANTIDAD. //CANTIDAD SALIA DEL IF QUE VALIDAVABA, AHORA SALE DIRECTO DEL SPLIT CON UN INT.PARSE. { Element = new Elemento(); lineasplit = linea.Split(';'); Element.prod.idprod = lineasplit[0]; Element.cantidad = int.Parse(lineasplit[1]); listaproduccion.Add(Element); } } }//TODO LO QUE SE AGREGO SE PROBO Y FUNCIONA. BORRA STOCK Y PROBALO POR LAS DUDAS (CARGA POR LO MENOS UNO BUENO Y UNO MALO). else { throw new Exception("El archivo esta vacio, el proceso finalizo sin completarse"); } } //ConfirmacionProcesado.Items.Add(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + " - Se lee archivo de produccion"); //en el punto anterior chupe lo que tenia en el txt que viene de planta y guarde en una lista todo en memoria // a continuacion voy a buscar los elementos de la lista del punto anterior a ver si existe en mi stock actual, // recorda que en el form load el stock actual siempre se carga en memoria, y abajo esta lista para ser recorrido, // busco si los elementos del punto anterior estan presentes en mi stock, si es asi, solo acumulo la cantidad, de lo contrario agrego una linea. foreach (Elemento elemprod in listaproduccion) { Elemento ElementoEncontrado = (Elemento)EmpresaInstanciada.stock.Find(x => x.prod.idprod == (elemprod.prod.idprod)); if (ElementoEncontrado != null) { ElementoEncontrado.cantidad = ElementoEncontrado.cantidad + elemprod.cantidad; // aca adiciona al stock los items que existen } else { EmpresaInstanciada.GuardarStock(elemprod); // aca guarda items nuevos } } GrabarStockTxt(); // aca vuelca al txt lo que tiene en memoria de la lista resultante actualizada del foreach anterior. ConfirmacionProcesado.Items.Add(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + " - Se actualizo stock"); ConfirmacionProcesado.SelectedIndex = ConfirmacionProcesado.Items.Count - 1; }
/// <summary> /// /// </summary> /// <param name="Ruta"></param> private void ProcesaPedido(string Ruta) { long numerocuit = 0; int nrocodcli = 0; int nrolinea = 0; string[] lineas = null; string[] nombrepedidoruta = null; string[] remueveExtension = null; Elemento Element; Pedido pedidoComercio = new Pedido(); if (File.Exists(Ruta)) { nombrepedidoruta = Ruta.Split('_'); remueveExtension = nombrepedidoruta[1].Split('.'); if (ListaPedidosTemporal.Contains(remueveExtension[0])) { MessageBox.Show("Ya esta cargado este pedido", "Atencion"); } else { lineas = File.ReadAllLines(Ruta); string[] lineasplit = null; foreach (string linea in lineas) { if (nrolinea == 0) { lineasplit = linea.Split(';'); if (lineasplit.Count() == 4 && !string.IsNullOrWhiteSpace(lineasplit[0]) && lineasplit[0].Count() >= 2 && lineasplit[0].Remove(1).ToUpper() == "C" && //v9.5 int.TryParse(lineasplit[0].Remove(0, 1), out nrocodcli) && nrocodcli > 0 && !string.IsNullOrWhiteSpace(lineasplit[1]) && !string.IsNullOrWhiteSpace(lineasplit[2]) && lineasplit[2].IndexOf("-") == 2 && lineasplit[2].LastIndexOf("-") == 11 && lineasplit[2].Replace("-", "").Count() == 11 && Int64.TryParse(lineasplit[2].Replace("-", ""), out numerocuit) && numerocuit >= 0 && numerocuit <= 99999999999 && // (Son 11 numeros 9) Int64 maximo valor: 9223372036854775807. !string.IsNullOrWhiteSpace(lineasplit[3])) { pedidoComercio.codigo = remueveExtension[0]; pedidoComercio.EnviadoLogistica = false; pedidoComercio.comercio.codigo = lineasplit[0]; pedidoComercio.comercio.razonsocial = lineasplit[1]; pedidoComercio.comercio.cuit = lineasplit[2]; pedidoComercio.comercio.domicilio = lineasplit[3]; nrolinea = nrolinea + 1; } else { throw new Exception("Error en el formato del archivo de pedido en la cabecera, el proceso finalizo sin completarse"); } } else { int numprod; int cantidad = 0; lineasplit = linea.Split(';'); if ((lineasplit.Count() == 2) && lineasplit[0].Count() >= 2 && //v9.5 lineasplit[0].Remove(1).ToUpper() == "P" && lineasplit[0].Remove(0, 1).Count() >= 1 && lineasplit[0].Remove(0, 1).Count() < 6 && int.TryParse(lineasplit[0].Remove(0, 1), out numprod) && numprod >= 1 && (int.TryParse(lineasplit[1], out cantidad)) && cantidad > 0) { Elemento ElementoEncontrado = (Elemento)EmpresaInstanciada.stock.Find(x => x.prod.idprod == lineasplit[0]); if (ElementoEncontrado != null) { Element = new Elemento(); Element.prod.idprod = lineasplit[0]; Element.cantidad = cantidad; pedidoComercio.GuardarPedido(Element); } } else { throw new Exception("Error en el formato del archivo de pedido, el proceso finalizo sin completarse"); } } } if (pedidoComercio.listaproducto.Count > 0) { EmpresaInstanciada.pedidos.Add(pedidoComercio); } ListaPedidosTemporal.Add(remueveExtension[0]); using (StreamWriter sw = File.AppendText(rutapedidohistorico)) { sw.Write(remueveExtension[0] + "\r\n"); } MessageBox.Show("El pedido fue procesado correctamente", "Informacion"); } GrabarPedidosTxt(); } ConfirmacionProcesado.Items.Add(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + " - Pedido Procesado"); ConfirmacionProcesado.SelectedIndex = ConfirmacionProcesado.Items.Count - 1; }
private void ProcesaEnvioLogistica() { string nombreArchivoLogistica = enviologistica + "Lote_" + codigodecomercio + "_L" + new Random().Next(1, 999).ToString() + ".txt"; using (StreamWriter sw = File.CreateText(nombreArchivoLogistica)) { foreach (Pedido PedidoActualComercio in EmpresaInstanciada.pedidos) { if (PedidoActualComercio.EnviadoLogistica == false)//Esto lo habiamos visto pero no se por que no lo modificamos, unicamente procesa los enviados a logistica false.. ya que los true ya los envio { //Ultima modificacion 25-11-2019, esto controla que todos los productos del pedido tengan stock, caso contrario el pedido no se procesa //Tampoco se elimina, solo que se "saltea", de forma tal que si se procesa otro lote de produccion que aumenta el stock en el siguiente envio a logistica se vuelve a procesar //Como los pedidos tienen orden cronologico se va a procesar primero. if (VerificaStockDePedido(PedidoActualComercio.listaproducto))//Esto es lo ultimo que hicimos no lo modifique anda { sw.WriteLine(EmpresaInstanciada.razonsocial + ";" + EmpresaInstanciada.cuit + ";" + EmpresaInstanciada.domicilio); sw.WriteLine("---"); sw.WriteLine(PedidoActualComercio.codigo + ";" + PedidoActualComercio.comercio.domicilio); foreach (Elemento elementopedido in PedidoActualComercio.listaproducto) { Elemento ElementoEncontrado = (Elemento)EmpresaInstanciada.stock.Find(x => x.prod.idprod == (elementopedido.prod.idprod)); if (ElementoEncontrado != null) { if (ElementoEncontrado.cantidad >= elementopedido.cantidad) { ElementoEncontrado.cantidad = ElementoEncontrado.cantidad - elementopedido.cantidad; sw.WriteLine(elementopedido.prod.idprod + ";" + elementopedido.cantidad); } } } PedidoActualComercio.EnviadoLogistica = true; } else { //No tenia stock entonces le dejo estado en false, procesalo en el siguiente envio PedidoActualComercio.EnviadoLogistica = false; } } } sw.Flush(); } string[] manipulacionDeRuta = nombreArchivoLogistica.Split('\\'); //Si el archivo esta vacio es que no tiene pedidos lo borro bool seborra = false; using (var myFile = File.Open(nombreArchivoLogistica, FileMode.Open)) { if (myFile.Length == 0) { seborra = true; } } if (seborra) { File.Delete(nombreArchivoLogistica); ConfirmacionProcesado.Items.Add(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + " - No se genero ningun lote a logistica"); ConfirmacionProcesado.SelectedIndex = ConfirmacionProcesado.Items.Count - 1; } else { ConfirmacionProcesado.Items.Add(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + " - Se genero el archivo " + manipulacionDeRuta[2] + " de lote para logistica"); ConfirmacionProcesado.SelectedIndex = ConfirmacionProcesado.Items.Count - 1; } GrabarStockTxt(); GrabarPedidosTxt(); //ConfirmacionProcesado.Items.Add(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + " - Se actualizo stock y pedidos"); }