private void ValidarKit(List <DivisionLotessalidaLinModel> listado, DivisionLotessalidaLinVistaModel model) { var serviceKit = FService.Instance.GetService(typeof(KitModel), _context, _db); if (serviceKit.exists(model.Lote)) { var kitobj = serviceKit.get(model.Lote) as KitModel; foreach (var item in kitobj.Lineas) { if (!listado.Any(f => item.Lote == f.Lote && Funciones.Qint(item.Loteid) == f.Tabla)) { throw new ValidationException(string.Format("El Kit {0} no está completo, falta añadir el lote {1}{2}", model.Lote, item.Lote, Funciones.RellenaCod(item.Loteid, 3))); } } } }
public ActionResult AgregarLineas(DivisionLotessalidaLinVistaModel model) { var errormessage = ""; try { var listadoSalida = Session[sessionsalida] as List <DivisionLotessalidaLinModel>; var listadoEntrada = Session[sessionentrada] as List <DivisionLotesentradaLinModel>; //NO PUEDE HABER MAS DE UNA SALIDA if (listadoSalida.Count >= 1) { throw new ValidationException("Ya se ha añadido un lote de salida"); } using (var divisionLotesService = FService.Instance.GetService(typeof(DivisionLotesModel), ContextService) as DivisionLotesService) { listadoSalida = divisionLotesService.CrearNuevasLineasSalida(listadoSalida, model); //CREAMOS LA SALIDA Session[sessionsalida] = listadoSalida; //CREAMOS LAS ENTRADAS DivisionLotessalidaLinVistaModel linea = new DivisionLotessalidaLinVistaModel(); listadoEntrada = divisionLotesService.CrearDosNuevasLineasEntrada(listadoSalida, listadoEntrada); Session[sessionentrada] = listadoEntrada; } return(Content(JsonConvert.SerializeObject(model), "application/json", Encoding.UTF8)); } catch (Exception ex) { errormessage = ex.Message; } return(Content("{\"error\":\"" + errormessage + "\"}", "application/json", Encoding.UTF8)); }
public List <DivisionLotessalidaLinModel> GenerarLineasSinStock(List <DivisionLotessalidaLinModel> listado, DivisionLotessalidaLinVistaModel 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 DivisionLotessalidaLinModel(_context) { 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 List <DivisionLotessalidaLinModel> GenerarLineasConStock(List <DivisionLotessalidaLinModel> listado, DivisionLotessalidaLinVistaModel 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 DivisionLotessalidaLinModel(_context) { 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 = (TipoAlmacenlote?)stockObj.tipoalmacenlote, } ); } } ValidarKit(listado, model); return(listado); }
public List <DivisionLotessalidaLinModel> CrearNuevasLineasSalida(List <DivisionLotessalidaLinModel> listado, DivisionLotessalidaLinVistaModel model) { var articulosService = FService.Instance.GetService(typeof(ArticulosModel), _context, _db) as ArticulosService; var maxId = listado.Any() ? listado.Max(f => f.Id) + 1 : 1; var articuloObj = articulosService.GetArticulo(model.Fkarticulos, model.Fkcuenta, model.Fkmonedas, model.Fkregimeniva, model.Flujo); if (articuloObj != null && articuloObj.Tipogestionlotes == Tipogestionlotes.Singestion) { throw new Exception("Error, el articulo debe tener gestión de lotes"); } return(GenerarLineasConStock(listado, model, articuloObj, maxId)); }