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)); }