예제 #1
0
        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);
        }
예제 #2
0
        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);
        }