public LotesModel SubirImagenLote(LotesModel model) { Stockhistorico pieza = null; string lote; string loteid; CalcularPartesLote(model.Lote, out lote, out loteid); try { pieza = _db.Stockhistorico.First(f => f.empresa == _context.Empresa && f.lote == lote && f.loteid == loteid); var carpetasService = FService.Instance.GetService(typeof(CarpetasModel), _context, _db) as CarpetasService; var ruta = carpetasService.GenerateRutaCarpeta("Lotes", "Imagenes", model.Lote); model.Fkcarpetas = carpetasService.GetCarpeta(ruta)?.Id; model.Fkarticulos = pieza.fkarticulos; model.Descripcion = _db.Articulos.Where(f => f.empresa == _context.Empresa && f.id == pieza.fkarticulos).Select(f => f.descripcion).SingleOrDefault(); model.LargoProduccion = pieza.largo; model.AnchoProduccion = pieza.ancho; model.GruesoProduccion = pieza.grueso; } catch (Exception e) { throw new Exception(string.Format("La pieza {0} no existe", model.Lote)); } return(model); }
private void StockhistoricoAddOrUpdate(MovimientosstockModel model) { Stockhistorico historicoitem = null; //Cuando finalizas una transformacion if (model.Tipomovimiento == TipoOperacionService.FinalizarTransformacionloteStock) { //En teoria siempre deberia de haber en el stock historico if (_db.Stockhistorico.Any(f => f.empresa == model.Empresa && f.lote == model.Lote && f.loteid == model.Loteid)) { //Borramos la que ya habia var piezaAntigua = _db.Stockhistorico.SingleOrDefault(f => f.empresa == model.Empresa && f.lote == model.Lote && f.loteid == model.Loteid); _db.Stockhistorico.Remove(piezaAntigua); //Eliminamos la antigua historicoitem = _db.Stockhistorico.Create(); //Creamos una nueva } } else { historicoitem = _db.Stockhistorico.SingleOrDefault(f => f.empresa == model.Empresa && f.fkalmacenes == model.Fkalmacenes && f.fkarticulos == model.Fkarticulos && f.lote == model.Lote && f.loteid == model.Loteid) ?? _db.Stockhistorico.Create(); } historicoitem.empresa = model.Empresa; historicoitem.fecha = DateTime.Now; historicoitem.fkalmacenes = model.Fkalmacenes; if (model.Fkalmaceneszona > 0 && model.Tipomovimiento != TipoOperacionService.EliminarRecepcionStock) { historicoitem.fkalmaceneszona = model.Fkalmaceneszona; } historicoitem.fkarticulos = model.Fkarticulos; historicoitem.lote = model.Lote; historicoitem.loteid = model.Loteid; historicoitem.tag = model.Tag; historicoitem.fkunidadesmedida = model.Fkunidadesmedida; if (historicoitem.largo == (historicoitem.largoentrada ?? 0)) { historicoitem.largo = model.Largo; } if (historicoitem.ancho == (historicoitem.anchoentrada ?? 0)) { historicoitem.ancho = model.Ancho; } if (historicoitem.grueso == (historicoitem.gruesoentrada ?? 0)) { historicoitem.grueso = model.Grueso; } if (model.Tipomovimiento == TipoOperacionService.MovimientoRemedir) { if (model.Pesoneto.HasValue) { historicoitem.pesonetolote = model.Pesoneto; } historicoitem.largo = model.Largo; historicoitem.ancho = model.Ancho; historicoitem.grueso = model.Grueso; historicoitem.metros = Math.Round(model.Metros, decimalesmedidas); historicoitem.referenciaproveedor = model.Referenciaproveedor; historicoitem.fkincidenciasmaterial = model.Fkincidenciasmaterial; historicoitem.fkcalificacioncomercial = model.Fkcalificacioncomercial; historicoitem.fktipograno = model.Fktipograno; historicoitem.fktonomaterial = model.Fktonomaterial; historicoitem.fkvariedades = model.Fkvariedades; } else if (model.Tipomovimiento == TipoOperacionService.InsertarReservaStock || model.Tipomovimiento == TipoOperacionService.EliminarReservaStock) { historicoitem.cantidaddisponible += model.Cantidad; } else { historicoitem.metros = Math.Round((historicoitem.metros ?? 0) + model.Metros, decimalesmedidas); historicoitem.cantidadtotal += model.Cantidad; historicoitem.cantidaddisponible += model.Cantidad; historicoitem.pesonetolote = (historicoitem.pesonetolote ?? 0) + model.Pesoneto; } historicoitem.integridadreferencialflag = Guid.NewGuid(); historicoitem.fkcarpetas = GenerarCarpetaAsociada(model, model.Empresa, _db); //if (Tipooperacion == TipoOperacionService.InsertarRecepcionStock || // Tipooperacion == TipoOperacionService.ActualizarRecepcionStock || // Tipooperacion == TipoOperacionService.EliminarRecepcionStock || // Tipooperacion == TipoOperacionService.InsertarTransformacionEntradaStock || // Tipooperacion == TipoOperacionService.ActualizarTransformacionEntradaStock || // Tipooperacion == TipoOperacionService.EliminarTransformacionEntradaStock || // Tipooperacion == TipoOperacionService.InsertarTraspasosalmacen || // Tipooperacion == TipoOperacionService.ActualizarTraspasosalmacen || // Tipooperacion == TipoOperacionService.EliminarTraspasosalmacen) //{ // var operacion = (model.Cantidad < 0) ? -1 : 1; // //costes historico // historicoitem.costeacicionalvariable = model.Costeadicionalvariable * operacion; // historicoitem.costeadicionalmaterial = model.Costeadicionalmaterial * operacion; // historicoitem.costeadicionalotro = model.Costeadicionalotro * operacion; // historicoitem.costeadicionalportes = model.Costeadicionalportes * operacion; //} if (model.Tipomovimiento == TipoOperacionService.InsertarRecepcionStock || model.Tipomovimiento == TipoOperacionService.EliminarRecepcionStock || model.Tipomovimiento == TipoOperacionService.InsertarTransformacionEntradaStock || model.Tipomovimiento == TipoOperacionService.InsertarDivisionLotesEntradaStock || model.Tipomovimiento == TipoOperacionService.InsertarTraspasosalmacen || model.Tipomovimiento == TipoOperacionService.FinalizarTransformacionloteStock) { historicoitem.costeadicionalmaterial = Math.Round((double)((historicoitem.costeadicionalmaterial ?? 0) + model.Costeadicionalmaterial ?? 0), decimalesmonedas); historicoitem.costeadicionalportes = Math.Round((double)((historicoitem.costeadicionalportes ?? 0) + model.Costeadicionalportes ?? 0), decimalesmonedas); historicoitem.costeadicionalotro = Math.Round((double)((historicoitem.costeadicionalotro ?? 0) + model.Costeadicionalotro ?? 0), decimalesmonedas); historicoitem.costeacicionalvariable = Math.Round((double)((historicoitem.costeacicionalvariable ?? 0) + model.Costeadicionalvariable ?? 0), decimalesmonedas); } //jmm if (model.Tipomovimiento == TipoOperacionService.InsertarRecepcionStock || model.Tipomovimiento == TipoOperacionService.InsertarTransformacionEntradaStock || model.Tipomovimiento == TipoOperacionService.InsertarDivisionLotesEntradaStock || model.Tipomovimiento == TipoOperacionService.FinalizarTransformacionloteStock) { dynamic xml; if (model.Tipomovimiento == TipoOperacionService.InsertarRecepcionStock) { var serializer = new Serializer <AlbaranesComprasDiarioStockSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); historicoitem.netocompra = (historicoitem.netocompra ?? 0) + xml.Linea.importe; historicoitem.preciovaloracion = xml.Linea.precio; } else if (model.Tipomovimiento == TipoOperacionService.InsertarTransformacionEntradaStock) { var serializer = new Serializer <TransformacionesentradaDiarioStockSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); historicoitem.netocompra = xml.Linea.precio; historicoitem.preciovaloracion = Math.Round((xml.Linea.precio / model.Metros), 2); } else if (model.Tipomovimiento == TipoOperacionService.InsertarDivisionLotesEntradaStock) { var serializer = new Serializer <DivisionLotesEntradaSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); historicoitem.netocompra = xml.Linea.precio; historicoitem.preciovaloracion = Math.Round((xml.Linea.precio / model.Metros), 2); } else { var serializer = new Serializer <TransformacioneslotesDiarioStockSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); historicoitem.netocompra = xml.Linea.precio; historicoitem.preciovaloracion = Math.Round((xml.Linea.precio / model.Metros), 2); } historicoitem.codigoproveedor = xml.Codigoproveedor; historicoitem.fechaentrada = xml.Fechadocumento; historicoitem.precioentrada = xml.Linea.precio; historicoitem.referenciaentrada = xml.Referencia; historicoitem.codigodocumentoentrada = xml.Id; historicoitem.cantidadentrada = (historicoitem.cantidadentrada ?? 0) + model.Cantidad; historicoitem.largoentrada = xml.Linea.largo; historicoitem.anchoentrada = xml.Linea.ancho; historicoitem.gruesoentrada = xml.Linea.grueso; historicoitem.metrosentrada = Math.Round((historicoitem.metrosentrada ?? 0) + model.Metros, decimalesmedidas); } else if (model.Tipomovimiento == TipoOperacionService.EliminarRecepcionStock) { var serializer = new Serializer <AlbaranesComprasDiarioStockSerializable>(); var xml = serializer.SetXml(model.Documentomovimiento); historicoitem.netocompra += xml.Linea.importe * -1; historicoitem.referenciaentrada = null; historicoitem.codigodocumentoentrada = null; historicoitem.cantidadentrada += model.Cantidad; historicoitem.metrosentrada = Math.Round((historicoitem.metrosentrada ?? 0) + model.Metros, decimalesmedidas); } else if (model.Tipomovimiento == TipoOperacionService.InsertarRecepcionStockDevolucion || model.Tipomovimiento == TipoOperacionService.ActualizarRecepcionStockDevolucion) { var serializer = new Serializer <AlbaranesComprasDiarioStockSerializable>(); var xml = serializer.SetXml(model.Documentomovimiento); // Bloque o tabla es lote unitario, en lote unitario no se resta el netocompra al devolver porque queda en 0 var codsFamilias = _db.Familiasproductos.Where(f => f.empresa == model.Empresa && (f.tipofamilia == (int)TipoFamilia.Bloque || f.tipofamilia == (int)TipoFamilia.Tabla)).Select(f => f.id).ToList(); if (!codsFamilias.Any(f => f == model.Fkarticulos.Substring(0, 2))) { historicoitem.netocompra += xml.Linea.importe; historicoitem.metrosentrada = Math.Round((historicoitem.metrosentrada ?? 0) + model.Metros, decimalesmedidas); } historicoitem.cantidadentrada += model.Cantidad; } // TODO: Creo que eliminar y actualizar van junto a EliminarEntregas else if (model.Tipomovimiento == TipoOperacionService.InsertarEntregaStock || model.Tipomovimiento == TipoOperacionService.InsertarTransformacionSalidaStock || model.Tipomovimiento == TipoOperacionService.InsertarDivisionLotesSalidaStock || model.Tipomovimiento == TipoOperacionService.EliminarTransformacionSalidaStock || model.Tipomovimiento == TipoOperacionService.InsertarTransformacionloteStock || model.Tipomovimiento == TipoOperacionService.ActualizarTransformacionloteStock) { dynamic xml; if (model.Tipomovimiento == TipoOperacionService.InsertarEntregaStock) { var serializer = new Serializer <AlbaranesDiarioStockSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); historicoitem.codigocliente = xml.Codigocliente; } else if (model.Tipomovimiento == TipoOperacionService.InsertarTransformacionSalidaStock || model.Tipomovimiento == TipoOperacionService.EliminarTransformacionSalidaStock) { var serializer = new Serializer <TransformacionessalidaDiarioStockSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); } else if (model.Tipomovimiento == TipoOperacionService.InsertarDivisionLotesSalidaStock) { var serializer = new Serializer <DivisionLotesSalidaSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); } else /*(model.Tipomovimiento == TipoOperacionService.InsertarTransformacionloteStock || * model.Tipomovimiento == TipoOperacionService.ActualizarTransformacionloteStock)*/ { var serializer = new Serializer <TransformacioneslotesDiarioStockSerializable>(); xml = serializer.SetXml(model.Documentomovimiento); } historicoitem.fechasalida = xml.Fechadocumento; historicoitem.preciosalida = xml.Linea.precio; historicoitem.referenciasalida = xml.Referencia; historicoitem.codigodocumentosalida = xml.Id; historicoitem.cantidadsalida = (historicoitem.cantidadsalida ?? 0) + (model.Cantidad * -1); // -1 para que se muestren en positivo historicoitem.largosalida = xml.Linea.largo; historicoitem.anchosalida = xml.Linea.ancho; historicoitem.gruesosalida = xml.Linea.grueso; historicoitem.metrossalida = Math.Round((historicoitem.metrossalida ?? 0) + (model.Metros * -1), decimalesmedidas); } else if (model.Tipomovimiento == TipoOperacionService.EliminarEntregaStock) { int?loteid = Convert.ToInt32(model.Loteid); var albaranAnterior = _db.AlbaranesLin.Where(f => f.empresa == model.Empresa && f.lote == model.Lote && f.tabla == loteid) .Select(f => f.fkalbaranes).ToList().LastOrDefault(); if (albaranAnterior > 0) { historicoitem.referenciasalida = _db.Albaranes.Where(f => f.empresa == model.Empresa && f.id == albaranAnterior) .Select(f => f.referencia).SingleOrDefault(); historicoitem.codigodocumentosalida = albaranAnterior; } else { historicoitem.referenciasalida = null; historicoitem.codigodocumentosalida = null; } historicoitem.cantidadsalida += model.Cantidad * -1; historicoitem.metrossalida = Math.Round((historicoitem.metrossalida ?? 0) + (model.Metros * -1), decimalesmedidas); } else if (model.Tipomovimiento == TipoOperacionService.InsertarDevolucionEntregaStock || model.Tipomovimiento == TipoOperacionService.ActualizarEntregaStockDevolucion) { historicoitem.cantidadsalida += model.Cantidad * -1; historicoitem.metrossalida = Math.Round((historicoitem.metrossalida ?? 0) + (model.Metros * -1), decimalesmedidas); } historicoitem.tipoalmacenlote = (int?)model.Tipodealmacenlote; _db.Stockhistorico.AddOrUpdate(historicoitem); }