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);
        }
Ejemplo n.º 2
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);
        }
        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);
        }
Ejemplo n.º 4
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);
        }