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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }