public override ListIndexModel GetListIndexModel(Type t, bool canEliminar, bool canModificar, string controller) { var model = base.GetListIndexModel(t, canEliminar, canModificar, controller); var unidadesService = new UnidadesService(_context, _db); var propiedadesVisibles = new[] { "Id", "Descripcion", "Fkgruposmateriales", "Fkunidades" }; var propiedades = Helpers.Helper.getProperties <ArticulosModel>(); model.ExcludedColumns = propiedades.Where(f => !propiedadesVisibles.Any(j => j == f.property.Name)).Select(f => f.property.Name).ToList(); model.FiltroColumnas.Add("Id", FiltroColumnas.EmpiezaPor); model.ColumnasCombo.Add("Fkunidades", unidadesService.getAll().OfType <UnidadesModel>().Select(f => new Tuple <string, string>(f.Id, f.Codigounidad))); //model.ColumnasCombo.Add("Fkgruposmateriales", ListGruposmateriales()); return(model); }
public List <TransformacioneslotesLinModel> GenerarLineasSinStock(List <TransformacioneslotesLinModel> listado, TransformacioneslotesLinVistaModel model, ArticulosDocumentosModel articuloObj, int maxId) { var familiasService = FService.Instance.GetService(typeof(FamiliasproductosModel), _context, _db) as FamiliasproductosService; var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; var monedasService = FService.Instance.GetService(typeof(MonedasModel), _context, _db) as MonedasService; var monedasObj = monedasService.get(model.Fkmonedas) as MonedasModel; var familiaObj = familiasService.get(ArticulosService.GetCodigoFamilia(model.Fkarticulos)) as FamiliasproductosModel; var ancho = model.Ancho; var largo = model.Largo; var grueso = model.Grueso; if (model.Modificarmedidas) { ancho = model.Ancho; largo = model.Largo; grueso = model.Grueso; } else { ancho = articuloObj.Ancho.Value; largo = articuloObj.Largo.Value; grueso = articuloObj.Grueso.Value; } var unidadesObj = unidadesService.get(familiaObj.Fkunidadesmedida) as UnidadesModel; var metros = UnidadesService.CalculaResultado(unidadesObj, model.Cantidad, largo, ancho, grueso, model.Metros); model.Metros = metros; listado.Add(new TransformacioneslotesLinModel() { Id = maxId++, Fkarticulos = model.Fkarticulos, Descripcion = articuloObj.Descripcion, Cantidad = model.Cantidad, Largo = largo, Ancho = ancho, Grueso = grueso, Fkunidades = articuloObj.Fkunidades, Metros = metros, Decimalesmedidas = unidadesObj.Decimalestotales, Decimalesmonedas = monedasObj.Decimales, Canal = model.Canal, } ); return(listado); }
private ReservasstockLinVistaModel GenerarModeloLin(ReservasstockModel albaranObj, string lote) { var serviceStock = new StockactualService(_context, _db); var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db) as ArticulosService; var familiasService = FService.Instance.GetService(typeof(FamiliasproductosModel), _context, _db) as FamiliasproductosService; var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; var obj = serviceStock.GetArticuloPorLoteOCodigo(lote, albaranObj.Fkalmacen, albaranObj.Empresa) as MovimientosstockModel; if (obj != null) { var fkarticulos = obj.Fkarticulos; var articulosObj = articulosService.GetArticulo(fkarticulos, albaranObj.Fkclientes, albaranObj.Fkmonedas.ToString(), albaranObj.Fkregimeniva, TipoFlujo.Venta); var familiaObj = familiasService.get(ArticulosService.GetCodigoFamilia(fkarticulos)) as FamiliasproductosModel; var unidadesObj = unidadesService.get(familiaObj.Fkunidadesmedida) as UnidadesModel; var metros = UnidadesService.CalculaResultado(unidadesObj, obj.Cantidad, obj.Largo, obj.Ancho, obj.Grueso, obj.Metros); obj.Metros = metros; return(new ReservasstockLinVistaModel() { Modificarmedidas = false, Lote = lote, Decimalesmonedas = albaranObj.Decimalesmonedas, Descuentocomercial = albaranObj.Porcentajedescuentocomercialcadena, Descuentoprontopago = albaranObj.Porcentajedescuentoprontopagocadena, Fkcuenta = albaranObj.Fkclientes, Fkmonedas = albaranObj.Fkmonedas.ToString(), Flujo = TipoFlujo.Venta, Fkregimeniva = albaranObj.Fkregimeniva, Portes = albaranObj.Costeportes.ToString(), Fkalmacen = albaranObj.Fkalmacen, Descuento = 0, Precio = articulosObj.Precio ?? 0, Fkarticulos = fkarticulos, Lineas = new List <MovimientosstockModel>(new[] { obj }) }); } return(new ReservasstockLinVistaModel() { Fkmonedas = albaranObj.Fkmonedas.ToString() }); }
public List <ReservasstockLinModel> CrearNuevasLineas(List <ReservasstockLinModel> listado, ReservasstockLinVistaModel model) { var stockactualService = new StockactualService(_context, _db); var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db) as ArticulosService; var familiasService = FService.Instance.GetService(typeof(FamiliasproductosModel), _context, _db) as FamiliasproductosService; var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; var tiposivaService = FService.Instance.GetService(typeof(TiposIvaModel), _context, _db) as TiposivaService; var monedasService = FService.Instance.GetService(typeof(MonedasModel), _context, _db) as MonedasService; var monedasObj = monedasService.get(model.Fkmonedas) as MonedasModel; var maxId = listado.Any() ? listado.Max(f => f.Id) + 1 : 1; foreach (var linea in model.Lineas) { if (!listado.Any(f => f.Lote == linea.Lote && f.Tabla == Funciones.Qint(linea.Loteid))) { var articuloObj = articulosService.GetArticulo(linea.Fkarticulos, model.Fkcuenta, model.Fkmonedas, model.Fkregimeniva, model.Flujo); var familiaObj = familiasService.get(ArticulosService.GetCodigoFamilia(linea.Fkarticulos)) as FamiliasproductosModel; var ancho = linea.Ancho; var largo = linea.Largo; var grueso = linea.Grueso; if (model.Modificarmedidas) { ancho = model.Ancho; largo = model.Largo; grueso = model.Grueso; } else { var item = familiaObj.Gestionstock ? stockactualService.GetArticuloPorLoteOCodigo( string.Format("{0}{1}", linea.Lote, Funciones.RellenaCod(linea.Loteid, 3)), model.Fkalmacen, Empresa) as MovimientosstockModel : null; ancho = item?.Ancho ?? linea.Ancho; largo = item?.Largo ?? linea.Largo; grueso = item?.Grueso ?? linea.Grueso; } var unidadesObj = unidadesService.get(familiaObj.Fkunidadesmedida) as UnidadesModel; var tiposivaObj = tiposivaService.get(articuloObj.Fktiposiva) as TiposIvaModel; var metros = UnidadesService.CalculaResultado(unidadesObj, linea.Cantidad, largo, ancho, grueso, model.Metros); linea.Metros = metros; var bruto = linea.Metros * model.Precio; var importedescuento = Math.Round(((bruto) * model.Descuento / 100.0), model.Decimalesmonedas); var total = bruto - importedescuento; listado.Add(new ReservasstockLinModel() { Id = maxId++, Fkarticulos = linea.Fkarticulos, Descripcion = articuloObj.Descripcion, Lote = linea.Lote, Tabla = Funciones.Qint(linea.Loteid), Tblnum = Funciones.Qint(linea.Loteid), Cantidad = linea.Cantidad, Largo = largo, Ancho = ancho, Grueso = grueso, Fkunidades = articuloObj.Fkunidades, Metros = metros, Precio = model.Precio, Porcentajedescuento = model.Descuento, Importedescuento = importedescuento, Importe = total, Decimalesmedidas = unidadesObj.Decimalestotales, Decimalesmonedas = monedasObj.Decimales, Fktiposiva = tiposivaObj.Id, Porcentajeiva = tiposivaObj.PorcentajeIva, Porcentajerecargoequivalencia = tiposivaObj.PorcentajeRecargoEquivalencia, Bundle = model.Tipopieza == TipoPieza.Bundle ? model.Lote.Replace(linea.Lote, string.Empty) : string.Empty, Caja = model.Caja, Canal = model.Canal } ); } } ValidarKit(listado, model); return(listado); }
private List <TransformacioneslotesLinModel> GenerarLineasConStock(List <TransformacioneslotesLinModel> listado, TransformacioneslotesLinVistaModel model, ArticulosDocumentosModel articuloObj, int maxId) { var stockactualService = new StockactualService(_context, _db); var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db) as ArticulosService; var familiasService = FService.Instance.GetService(typeof(FamiliasproductosModel), _context, _db) as FamiliasproductosService; var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; var lotesService = new LotesService(_context); foreach (var linea in model.Lineas) { if (!listado.Any(f => f.Lote == linea.Lote && f.Tabla == Funciones.Qint(linea.Loteid))) { var stockObj = _db.Stockhistorico.Single( f => f.fkalmacenes == _context.Fkalmacen && f.empresa == _context.Empresa && f.lote == linea.Lote && f.loteid == linea.Loteid); var loteObj = lotesService.Get(stockObj.id.ToString()); articuloObj = articulosService.GetArticulo(linea.Fkarticulos, model.Fkcuenta, model.Fkmonedas, model.Fkregimeniva, model.Flujo); var familiaObj = familiasService.get(ArticulosService.GetCodigoFamilia(linea.Fkarticulos)) as FamiliasproductosModel; var ancho = linea.Ancho; var largo = linea.Largo; var grueso = linea.Grueso; var item = familiaObj.Gestionstock ? stockactualService.GetArticuloPorLoteOCodigo( string.Format("{0}{1}", linea.Lote, Funciones.RellenaCod(linea.Loteid, 3)), model.Fkalmacen, Empresa) as MovimientosstockModel : null; if (model.Modificarmedidas) { ancho = model.Ancho; largo = model.Largo; grueso = model.Grueso; } else { ancho = item?.Ancho ?? linea.Ancho; largo = item?.Largo ?? linea.Largo; grueso = item?.Grueso ?? linea.Grueso; } if (linea.Cantidad > item.Cantidad) { throw new ValidationException(string.Format("La cantidad indicada para el lote {0} es superior a la que hay en el stock actual", string.Format("{0}{1}", linea.Lote, Funciones.RellenaCod(linea.Loteid, 3)))); } var unidadesObj = unidadesService.get(familiaObj.Fkunidadesmedida) as UnidadesModel; var metros = UnidadesService.CalculaResultado(unidadesObj, articuloObj.Lotefraccionable ? model.Cantidad : linea.Cantidad, largo, ancho, grueso, model.Metros); linea.Metros = metros; listado.Add(new TransformacioneslotesLinModel() { Id = maxId++, Fkarticulos = linea.Fkarticulos, Descripcion = articuloObj.Descripcion, Lote = linea.Lote, Tabla = Funciones.Qint(linea.Loteid), Cantidad = articuloObj.Lotefraccionable ? model.Cantidad : linea.Cantidad, Largo = largo, Ancho = ancho, Grueso = grueso, Fkunidades = articuloObj.Fkunidades, Metros = metros, Decimalesmedidas = unidadesObj.Decimalestotales, Canal = model.Canal, Flagidentifier = Guid.NewGuid(), Precio = loteObj.Costenetocompra, Tipodealmacenlote = loteObj.Tipodealmacenlote } ); } } ValidarKit(listado, model); return(listado); }
public LotesModel Get(string id) { var intid = int.Parse(id); var obj = _db.Stockhistorico.Single(f => f.id == intid && f.empresa == _context.Empresa); var unidades = _db.Unidades.Single(f => f.id == obj.fkunidadesmedida); var loteid = Funciones.Qint(obj.loteid); var estadoActual = EstadoStock.SinStock; if (_db.Stockactual.Any( f => f.cantidaddisponible > 0 && f.empresa == obj.empresa && f.lote == obj.lote && f.loteid == obj.loteid && f.fkarticulos == obj.fkarticulos)) { estadoActual = EstadoStock.EnStock; } else if (_db.ReservasstockLin.Include("Reservasstock").Any(f => f.empresa == obj.empresa && f.lote == obj.lote && f.tabla == loteid && _db.Estados.Any(j => (j.documento + "-" + j.id) == f.Reservasstock.fkestados && j.tipoestado < (int)TipoEstado.Finalizado))) { estadoActual = EstadoStock.Reservado; } else if ( _db.Transformacionesloteslin.Include("Transformacioneslotes") .Any( f => f.empresa == obj.empresa && f.lote == obj.lote && f.tabla == loteid && _db.Estados.Any( j => (j.documento + "-" + j.id) == f.Transformacioneslotes.fkestados && j.tipoestado < (int)TipoEstado.Finalizado))) { estadoActual = EstadoStock.Transformacion; } var result = new LotesModel(); result.Estado = estadoActual; result.Fkvariedades = obj.fkvariedades; result.Loteproveedor = obj.referenciaproveedor; result.Fkalmacenes = obj.fkalmacenes; result.NombreAlmacen = _db.Almacenes.Where(f => f.empresa == obj.empresa && f.id == obj.fkalmacenes).Select(f => f.descripcion).SingleOrDefault(); result.Zona = obj.fkalmaceneszona?.ToString(); result.Fkcalificacioncomercial = obj.fkcalificacioncomercial; result.Fkalmaceneszona = obj.fkalmaceneszona?.ToString() ?? string.Empty; result.Fkincidenciasmaterial = obj.fkincidenciasmaterial; result.Fktipograno = obj.fktipograno; result.Fktonomaterial = obj.fktonomaterial; result.Lotereferencia = string.Format("{0}{1}", obj.lote, Funciones.RellenaCod(obj.loteid, 3)); result.Tipodealmacenlote = (TipoAlmacenlote?)obj.tipoalmacenlote; result.Fkcarpetas = obj.fkcarpetas; result.Decimales = unidades.decimalestotales; result.CantidadProduccion = obj.cantidaddisponible; result.LargoProduccion = obj.largo; result.AnchoProduccion = obj.ancho; result.GruesoProduccion = obj.grueso; var modelUnidades = new UnidadesModel(); modelUnidades.Formula = (TipoStockFormulas)unidades.formula; var metros = obj.metros ?? 0; result.MetrosProduccion = obj.cantidaddisponible == 0 ? UnidadesService.CalculaResultado(modelUnidades, 1, obj.largo, obj.ancho, obj.grueso, metros):obj.metros; result.Unidades = unidades.codigounidad; result.Formula = unidades.formula; result.Costeadicionalmaterial = obj.costeadicionalmaterial; result.Costeadicionalportes = obj.costeadicionalportes; result.Costeadicionalotro = obj.costeadicionalotro; result.Costeadicionalvariable = obj.costeacicionalvariable; result.Pesoneto = obj.pesonetolote; // jmm result.Codigoproveedor = obj.codigoproveedor; result.Fechaentrada = obj.fechaentrada; result.Precioentrada = obj.precioentrada; result.Referenciaentrada = obj.referenciaentrada; result.Codigodocumentoentrada = obj.codigodocumentoentrada.ToString(); result.CantidadEntrada = obj.cantidadentrada; result.LargoEntrada = obj.largoentrada; result.AnchoEntrada = obj.anchoentrada; result.GruesoEntrada = obj.gruesoentrada; result.MetrosEntrada = obj.metrosentrada; result.Netocompra = obj.netocompra; result.Preciovaloracion = obj.preciovaloracion; result.Codigocliente = obj.codigocliente; result.Fechasalida = obj.fechasalida; result.Preciosalida = obj.preciosalida; result.Referenciasalida = obj.referenciasalida; result.Codigodocumentosalida = obj.codigodocumentosalida.ToString(); result.CantidadSalida = obj.cantidadsalida; result.LargoSalida = obj.largosalida; result.AnchoSalida = obj.anchosalida; result.GruesoSalida = obj.gruesosalida; result.MetrosSalida = obj.metrossalida; result.CantidadProduccion = obj.cantidaddisponible; result.MetrosDisponibles = UnidadesService.CalculaResultado(modelUnidades, obj.cantidaddisponible, obj.largo, obj.ancho, obj.grueso, metros); //articulo descripcion result.Fkarticulos = obj.fkarticulos; //entrada //var entradaObj = GetModeloEntrada(obj.lote, loteid); //if (entradaObj != null) //{ // result.Codigoproveedor = entradaObj.Cuenta; // result.Fechaentrada = entradaObj.Fecha; // result.Precioentrada = entradaObj.Precio; // result.Referenciaentrada = entradaObj.Referencia; // result.Codigodocumentoentrada = entradaObj.Codigodocumento; // result.CantidadEntrada = entradaObj.Cantidad; // result.LargoEntrada = entradaObj.Largo; // result.AnchoEntrada = entradaObj.Ancho; // result.GruesoEntrada = entradaObj.Grueso; // result.MetrosEntrada = entradaObj.Metros; // result.Netocompra = entradaObj.Precio; //} ////salida //var salidaObj = GetModeloSalida(obj.lote,loteid); //if (salidaObj != null) //{ // result.Codigocliente = salidaObj.Cuenta; // result.Fechasalida = salidaObj.Fecha; // result.Preciosalida = salidaObj.Precio; // result.Referenciasalida = salidaObj.Referencia; // result.Codigodocumentosalida = salidaObj.Codigodocumento; // result.CantidadSalida = salidaObj.Cantidad; // result.LargoSalida = salidaObj.Largo; // result.AnchoSalida = salidaObj.Ancho; // result.GruesoSalida = salidaObj.Grueso; // result.MetrosSalida = salidaObj.Metros; //} result.Documentosrelacionados = GetDocumentosRelacionados(obj.lote, obj.loteid); return(result); }
private List <AlbaranesLinModel> GenerarLineasConStock(List <AlbaranesLinModel> listado, AlbaranesLinVistaModel model, ArticulosDocumentosModel articuloObj, int maxId) { var stockactualService = new StockactualService(_context, _db); var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db) as ArticulosService; var familiasService = FService.Instance.GetService(typeof(FamiliasproductosModel), _context, _db) as FamiliasproductosService; var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; var tiposivaService = FService.Instance.GetService(typeof(TiposIvaModel), _context, _db) as TiposivaService; var monedasService = FService.Instance.GetService(typeof(MonedasModel), _context, _db) as MonedasService; var monedasObj = monedasService.get(model.Fkmonedas) as MonedasModel; foreach (var linea in model.Lineas) { if (!listado.Any(f => f.Lote == linea.Lote && f.Tabla == Funciones.Qint(linea.Loteid))) { articuloObj = articulosService.GetArticulo(linea.Fkarticulos, model.Fkcuenta, model.Fkmonedas, model.Fkregimeniva, model.Flujo); var familiaObj = familiasService.get(ArticulosService.GetCodigoFamilia(linea.Fkarticulos)) as FamiliasproductosModel; var ancho = linea.Ancho; var largo = linea.Largo; var grueso = linea.Grueso; var item = familiaObj.Gestionstock ? stockactualService.GetArticuloPorLoteOCodigo( string.Format("{0}{1}", linea.Lote, Funciones.RellenaCod(linea.Loteid, 3)), model.Fkalmacen, Empresa) as MovimientosstockModel : null; if (model.Modificarmedidas) { ancho = model.Ancho; largo = model.Largo; grueso = model.Grueso; } else { ancho = item?.Ancho ?? linea.Ancho; largo = item?.Largo ?? linea.Largo; grueso = item?.Grueso ?? linea.Grueso; } if (linea.Cantidad > item.Cantidad) { throw new ValidationException(string.Format("La cantidad indicada para el lote {0} es superior a la que hay en el stock actual", string.Format("{0}{1}", linea.Lote, Funciones.RellenaCod(linea.Loteid, 3)))); } var unidadesObj = unidadesService.get(familiaObj.Fkunidadesmedida) as UnidadesModel; var tiposivaObj = tiposivaService.get(articuloObj.Fktiposiva) as TiposIvaModel; var metros = UnidadesService.CalculaResultado(unidadesObj, articuloObj.Lotefraccionable ? model.Cantidad :linea.Cantidad, largo, ancho, grueso, model.Metros); linea.Metros = metros; var bruto = linea.Metros * model.Precio; var importedescuento = Math.Round(((bruto) * model.Descuento / 100.0), model.Decimalesmonedas); var total = bruto - importedescuento; listado.Add(new AlbaranesLinModel() { Nueva = true, Id = maxId++, Fkarticulos = linea.Fkarticulos, Descripcion = articuloObj.Descripcion, Lote = linea.Lote, Tabla = Funciones.Qint(linea.Loteid), Tblnum = Funciones.Qint(linea.Loteid), Cantidad = articuloObj.Lotefraccionable ? model.Cantidad : linea.Cantidad, Largo = largo, Ancho = ancho, Grueso = grueso, Fkunidades = articuloObj.Fkunidades, Metros = metros, Precio = model.Precio, Porcentajedescuento = model.Descuento, Importedescuento = importedescuento, Importe = total, Decimalesmedidas = unidadesObj.Decimalestotales, Decimalesmonedas = monedasObj.Decimales, Fktiposiva = tiposivaObj.Id, Porcentajeiva = tiposivaObj.PorcentajeIva, Porcentajerecargoequivalencia = tiposivaObj.PorcentajeRecargoEquivalencia, Bundle = model.Tipopieza == TipoPieza.Bundle ? model.Lote.Replace(linea.Lote, string.Empty) : string.Empty, Caja = model.Caja, Canal = model.Canal, Flagidentifier = Guid.NewGuid() } ); } } ValidarKit(listado, model); return(listado); }
public List <AlbaranesLinModel> GenerarLineasSinStock(List <AlbaranesLinModel> listado, AlbaranesLinVistaModel model, ArticulosDocumentosModel articuloObj, int maxId) { var familiasService = FService.Instance.GetService(typeof(FamiliasproductosModel), _context, _db) as FamiliasproductosService; var unidadesService = FService.Instance.GetService(typeof(UnidadesModel), _context, _db) as UnidadesService; var tiposivaService = FService.Instance.GetService(typeof(TiposIvaModel), _context, _db) as TiposivaService; var monedasService = FService.Instance.GetService(typeof(MonedasModel), _context, _db) as MonedasService; var monedasObj = monedasService.get(model.Fkmonedas) as MonedasModel; var familiaObj = familiasService.get(ArticulosService.GetCodigoFamilia(model.Fkarticulos)) as FamiliasproductosModel; var ancho = model.Ancho; var largo = model.Largo; var grueso = model.Grueso; if (model.Modificarmedidas) { ancho = model.Ancho; largo = model.Largo; grueso = model.Grueso; } else { ancho = articuloObj.Ancho.Value; largo = articuloObj.Largo.Value; grueso = articuloObj.Grueso.Value; } var unidadesObj = unidadesService.get(familiaObj.Fkunidadesmedida) as UnidadesModel; var tiposivaObj = tiposivaService.get(articuloObj.Fktiposiva) as TiposIvaModel; var metros = UnidadesService.CalculaResultado(unidadesObj, model.Cantidad, largo, ancho, grueso, model.Metros); model.Metros = metros; var bruto = model.Metros * model.Precio; var importedescuento = Math.Round(((bruto) * model.Descuento / 100.0), model.Decimalesmonedas); var total = bruto - importedescuento; listado.Add(new AlbaranesLinModel() { Nueva = true, Id = maxId++, Fkarticulos = model.Fkarticulos, Descripcion = articuloObj.Descripcion, Cantidad = model.Cantidad, Largo = largo, Ancho = ancho, Grueso = grueso, Fkunidades = articuloObj.Fkunidades, Metros = metros, Precio = model.Precio, Porcentajedescuento = model.Descuento, Importedescuento = importedescuento, Importe = total, Decimalesmedidas = unidadesObj.Decimalestotales, Decimalesmonedas = monedasObj.Decimales, Fktiposiva = tiposivaObj.Id, Porcentajeiva = tiposivaObj.PorcentajeIva, Porcentajerecargoequivalencia = tiposivaObj.PorcentajeRecargoEquivalencia, Canal = model.Canal } ); return(listado); }