public ActionResult FacturasLinAddNew([ModelBinder(typeof(DevExpressEditorsBinder))] FacturasLinModel item)
        {
            var model = Session[session] as List <FacturasLinModel>;

            try
            {
                if (ModelState.IsValid)
                {
                    var max = model.Any() ? model.Max(f => f.Id) : 0;
                    item.Id = max + 1;

                    var moneda = Funciones.Qnull(Request.Params["fkmonedas"]);

                    var serviceMonedas   = FService.Instance.GetService(typeof(MonedasModel), ContextService);
                    var serviceArticulos = FService.Instance.GetService(typeof(ArticulosModel), ContextService);
                    var serviceEmpresa   = FService.Instance.GetService(typeof(EmpresaModel), ContextService);
                    var empresa          = serviceEmpresa.get(ContextService.Empresa) as EmpresaModel;

                    if (serviceArticulos.exists(item.Fkarticulos))
                    {
                        var configuracionAplicacion = appService.GetConfiguracion();
                        if (configuracionAplicacion.VentasUsarCanal && configuracionAplicacion.VentasCanalObligatorio && string.IsNullOrEmpty(item.Canal))
                        {
                            ModelState.AddModelError("Canal", string.Format(General.ErrorCampoObligatorio, Facturas.Canal));
                        }
                        else
                        {
                            var monedaObj          = serviceMonedas.get(moneda) as MonedasModel;
                            var descuentopp        = Funciones.Qdouble(Request.Params["descuentopp"]) ?? 0;
                            var descuentocomercial = Funciones.Qdouble(Request.Params["descuentocomercial"]) ?? 0;
                            var decimalesunidades  = Funciones.Qint(Request.Params["decimalesunidades"]);
                            var portes             = 0;
                            if (item.Lineaasociada.HasValue)
                            {
                                var linea = model.SingleOrDefault(f => f.Id == item.Lineaasociada.Value);
                                linea.Cantidad = linea.Cantidad - item.Cantidad;
                                using (var FacturasService = FService.Instance.GetService(typeof(FacturasModel), ContextService) as FacturasService)
                                {
                                    var nuevalinea = FacturasService.ImportarLineas(1, 0, new[] { new LineaImportarModel()
                                                                                                  {
                                                                                                      Fkarticulos = linea.Fkarticulos,
                                                                                                      Fkunidades  = linea.Fkunidades,
                                                                                                      Ancho       = linea.Ancho.Value, Cantidad = linea.Cantidad.Value, Largo = linea.Largo.Value, Grueso = linea.Grueso.Value, Metros = linea.Metros.Value, Precio = linea.Precio.Value, Porcentajedescuento = linea.Porcentajedescuento.Value
                                                                                                  } }).First();

                                    linea.Metros               = nuevalinea.Metros;
                                    linea.Importe              = nuevalinea.Importe;
                                    linea.Importedescuento     = nuevalinea.Importedescuento;
                                    item.Fkalbaranes           = linea.Fkalbaranes;
                                    item.Fkalbaranesreferencia = linea.Fkalbaranesreferencia;
                                    item.Orden = linea.Id * ApplicationHelper.EspacioOrdenLineas;
                                }
                            }

                            item.Decimalesmonedas = monedaObj.Decimales;
                            item.Importe          = Math.Round(item.Importe ?? 0, monedaObj.Decimales);
                            item.Precio           = Math.Round(item.Precio ?? 0, empresa.Decimalesprecios ?? 2);
                            item.Decimalesmedidas = decimalesunidades ?? 0;
                            item.Revision         = item.Revision?.ToUpper();
                            item.Bundle           = item.Bundle?.ToUpper();

                            // Validar dimensiones artículo
                            try
                            {
                                var familiasProductosService = FService.Instance.GetService(typeof(FamiliasproductosModel), ContextService) as FamiliasproductosService;
                                familiasProductosService.ValidarDimensiones(item.Fkarticulos, item.Largo, item.Ancho, item.Grueso);
                            }
                            catch (ValidationException ex)
                            {
                                Regex rgx = new Regex(@"\{.*\}");

                                if (Regex.IsMatch(ex.Message, rgx.Replace(RFamilias.ErrorLargo, ".*") + ".*"))
                                {
                                    ModelState.AddModelError("SLargo", Regex.Match(ex.Message, rgx.Replace(RFamilias.ErrorLargo, ".*")).Value);
                                }
                                if (Regex.IsMatch(ex.Message, ".*" + rgx.Replace(RFamilias.ErrorAncho, ".*") + ".*"))
                                {
                                    ModelState.AddModelError("SAncho", Regex.Match(ex.Message, rgx.Replace(RFamilias.ErrorAncho, ".*")).Value);
                                }
                                if (Regex.IsMatch(ex.Message, ".*" + rgx.Replace(RFamilias.ErrorGrueso, ".*") + "."))
                                {
                                    ModelState.AddModelError("SGrueso", Regex.Match(ex.Message, rgx.Replace(RFamilias.ErrorGrueso, ".*")).Value);
                                }

                                return(PartialView("_Facturaslin", model));
                            }

                            model.Add(item);

                            Session[session] = model;
                            var service = FService.Instance.GetService(typeof(FacturasModel), ContextService) as FacturasService;
                            Session[sessiontotales] = service.Recalculartotales(model, descuentopp, descuentocomercial, portes, monedaObj.Decimales);
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("Fkarticulos", Articulos.ErrorArticuloInexistente);
                    }
                }
            }
            catch (ValidationException)
            {
                model.Remove(item);
                throw;
            }



            return(PartialView("_Facturaslin", model));
        }