private void GenerarMovimientosLineasCostes(IEnumerable <TransformacioneslotesLinModel> lineas, TransformacioneslotesModel nuevo, TipoOperacionService movimiento, TrabajosModel trabajosObj, bool finalizarstock = false) { var movimientosStockService = new MovimientosstockService(_context, _db); var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db) as ArticulosService; var serializer = new Serializer <TransformacioneslotesDiarioStockSerializable>(); var vectorArticulos = new Hashtable(); var operacion = 1; if (movimiento == TipoOperacionService.EliminarCostes) { operacion = -1; } foreach (var linea in lineas) { var codigoarticulonuevo = linea.Fkarticulos; if (!string.IsNullOrEmpty(trabajosObj.Fkacabadofinal)) { codigoarticulonuevo = string.Format("{0}{1}{2}{3}{4}", ArticulosService.GetCodigoFamilia(linea.Fkarticulos), ArticulosService.GetCodigoMaterial(linea.Fkarticulos), ArticulosService.GetCodigoCaracteristica(linea.Fkarticulos), ArticulosService.GetCodigoGrosor(linea.Fkarticulos), trabajosObj.Fkacabadofinal); if (!articulosService.exists(codigoarticulonuevo)) { throw new Exception(string.Format("El articulo {0} no existe", codigoarticulonuevo)); } } ArticulosModel articuloObj; if (vectorArticulos.ContainsKey(linea.Fkarticulos)) { articuloObj = vectorArticulos[linea.Fkarticulos] as ArticulosModel; } else { articuloObj = articulosService.get(linea.Fkarticulos) as ArticulosModel; vectorArticulos.Add(linea.Fkarticulos, articuloObj); } var aux = Funciones.ConverterGeneric <TransformacionesloteslinSerialized>(linea); if (articuloObj?.Gestionstock ?? false) { var model = new MovimientosstockModel { Empresa = nuevo.Empresa, Fkalmacenes = nuevo.Fkalmacen.ToString(), Fkalmaceneszona = Funciones.Qint(nuevo.Fkzonas), Fkarticulos = codigoarticulonuevo, //linea.Fkarticulos, Referenciaproveedor = "", Fkcontadorlote = linea.Fkcontadoreslotes, Lote = linea.Lote, Loteid = (linea.Tabla ?? 0).ToString(), Tag = "", Fkunidadesmedida = linea.Fkunidades, //Cantidad = 0, //Largo = linea.Largo ?? 0, //Ancho = linea.Ancho ?? 0, //Grueso = linea.Grueso ?? 0, //Metros = (linea.Metros ?? 0) * operacion, //Pesoneto = ((articuloObj.Kilosud ?? 0) * linea.Metros) * operacion, Documentomovimiento = serializer.GetXml( new TransformacioneslotesDiarioStockSerializable { Id = nuevo.Id ?? 0, Referencia = nuevo.Referencia, Fechadocumento = nuevo.Fechadocumento, Codigoproveedor = nuevo.Fkproveedores, Linea = aux }), //Fkusuarios = Usuarioid, //Tipooperacion = operacion, Costeadicionalmaterial = linea.Costeadicionalmaterial * operacion, Costeadicionalotro = linea.Costeadicionalotro * operacion, Costeadicionalvariable = linea.Costeadicionalvariable * operacion, Costeadicionalportes = linea.Costeadicionalportes * operacion, Tipodealmacenlote = linea.Tipodealmacenlote, Tipomovimiento = movimiento }; movimientosStockService.GenerarMovimiento(model, movimiento); } } }
private void GenerarMovimientosLineas(IEnumerable <TransformacioneslotesLinModel> lineas, TransformacioneslotesModel nuevo, TipoOperacionService movimiento, TrabajosModel trabajosObj, MaterialesModel materialesObj, bool finalizarstock = false) { var movimientosStockService = new MovimientosstockService(_context, _db); var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db); var serializer = new Serializer <TransformacioneslotesDiarioStockSerializable>(); var vectorArticulos = new Hashtable(); var operacion = 1; if (movimiento == TipoOperacionService.InsertarTransformacionloteStock) { operacion = -1; } //Rai // Ordenamos lineas por articulo y cantidad para procesar primero las positivas evitando error stock negativo no autorizado // (ya que se procesan las lineas antes existentes con cantidad negativa para quitarlas // y luego se añade las lineas de grid cantidad +) var mylineas = lineas.OrderBy(x => x.Fkarticulos).ThenByDescending(x => x.Cantidad).ToList(); foreach (var linea in mylineas) { //Rai -- sustituye el codigo del acabado y el codigo del material en caso de que sea necesario var codigoarticulonuevo = linea.Fkarticulos; var acabado = !string.IsNullOrEmpty(trabajosObj.Fkacabadofinal) ? trabajosObj.Fkacabadofinal : ArticulosService.GetCodigoAcabado(linea.Fkarticulos); var material = !string.IsNullOrEmpty(materialesObj.Id) ? materialesObj.Id : ArticulosService.GetCodigoMaterial(linea.Fkarticulos); codigoarticulonuevo = string.Format("{0}{1}{2}{3}{4}", ArticulosService.GetCodigoFamilia(linea.Fkarticulos), material, ArticulosService.GetCodigoCaracteristica(linea.Fkarticulos), ArticulosService.GetCodigoGrosor(linea.Fkarticulos), acabado); if (!articulosService.exists(codigoarticulonuevo)) { throw new Exception(string.Format("El articulo {0} no existe", codigoarticulonuevo)); } ArticulosModel articuloObj; if (vectorArticulos.ContainsKey(linea.Fkarticulos)) { articuloObj = vectorArticulos[linea.Fkarticulos] as ArticulosModel; } else { articuloObj = articulosService.get(linea.Fkarticulos) as ArticulosModel; vectorArticulos.Add(linea.Fkarticulos, articuloObj); } var aux = Funciones.ConverterGeneric <TransformacionesloteslinSerialized>(linea); if (articuloObj?.Gestionstock ?? false) { var model = new MovimientosstockModel { Empresa = nuevo.Empresa, Fkalmacenes = nuevo.Fkalmacen, Fkalmaceneszona = Funciones.Qint(nuevo.Fkzonas), Fkarticulos = codigoarticulonuevo, //linea.Fkarticulos Referenciaproveedor = "", Fkcontadorlote = linea.Fkcontadoreslotes, Lote = linea.Lote, Loteid = (linea.Tabla ?? 0).ToString(), Tag = "", Fkunidadesmedida = linea.Fkunidades, Largo = linea.Largo ?? 0, Ancho = linea.Ancho ?? 0, Grueso = linea.Grueso ?? 0, Documentomovimiento = serializer.GetXml( new TransformacioneslotesDiarioStockSerializable { Id = nuevo.Id.Value, Referencia = nuevo.Referencia, Fechadocumento = nuevo.Fechadocumento, Codigoproveedor = nuevo.Fkproveedores, Fkarticulosnuevo = codigoarticulonuevo, Linea = aux }), Fkusuarios = Usuarioid, //Tipooperacion = operacion, Cantidad = (linea.Cantidad ?? 0) * operacion, Metros = (linea.Metros ?? 0) * operacion, Costeadicionalmaterial = linea.Costeadicionalmaterial, Costeadicionalotro = linea.Costeadicionalotro, Costeadicionalvariable = linea.Costeadicionalvariable, Costeadicionalportes = linea.Costeadicionalportes, Tipomovimiento = movimiento }; var tipooperacion = finalizarstock ? TipoOperacionService.FinalizarTransformacionloteStock : linea.Nueva ? TipoOperacionService.InsertarTransformacionloteStock : TipoOperacionService.ActualizarTransformacionloteStock; var currentValidationService = _validationService as TransformacioneslotesValidation; if (currentValidationService.ModificarCostes) { tipooperacion = TipoOperacionService.ActualizarcosteTransformacionloteStock; } if (tipooperacion == TipoOperacionService.InsertarTransformacionloteStock) { model.Cantidad = -model.Cantidad; } movimientosStockService.GenerarMovimiento(model, tipooperacion); } } }