public ActionResult DesencriptaIDConcepto(FormCollection fc) { using (var db = new sgopEntities()) { try { MethodEncrypt me = new MethodEncrypt(); int idConcepto = Convert.ToInt32(me.getDecrypt(fc["idConceptoEncrypt"])); string[] data = new string[2]; var concepto = db.catalogoConceptos.Find(idConcepto); data[0] = idConcepto.ToString(); data[1] = (concepto.precioUnitario * Convert.ToDouble(fc["cantidad"])).ToString(); db.Dispose(); return(Json(data)); } catch (Exception) { return(Content("")); } } }
public ActionResult AddConceptoTablaTemp(FormCollection fc) { //Solo SI el campo (fechaPropuesta) en la tabla licitaciones no ha pasado, se puede editar. int IDConcepto = 0; double cantidad = 0; double? total = 0, subtotal; MethodEncrypt me = new MethodEncrypt(); string [] contenidoTabla = new string[4];//Guarda el body y el footer de la tabla catalogoConceptos concepto; DateTime fechaPropuesta = DateTime.Parse(fc["fechaPropuesta"]); JArray jsonConceptos = JArray.Parse(fc["conceptosAgregados"].ToString()); using (var db = new sgopEntities()) { //Verifica que el IDConcepto sea correcto try { for (int i = 0; i < jsonConceptos.Count; i++) { concepto = db.catalogoConceptos.Find(Convert.ToInt32(jsonConceptos[i]["idConcepto"])); total += Convert.ToDouble(jsonConceptos[i]["cantidad"]) * concepto.precioUnitario; } IDConcepto = Convert.ToInt32(me.getDecrypt(fc["idConceptoEncrypt"].ToString())); concepto = db.catalogoConceptos.Where(cc => cc.idConcepto == IDConcepto).First(); cantidad = Convert.ToDouble(fc["cantidad"].ToString()); subtotal = cantidad * concepto.precioUnitario; total += subtotal; //Body de la tabla contenidoTabla[0] = "<tr id='fila." + fc["idConceptoEncrypt"].ToString() + "'>"; contenidoTabla[0] += "<td>" + concepto.clave + "</td>"; contenidoTabla[0] += "<td>" + concepto.descripcion + "</td>"; contenidoTabla[0] += "<td>" + concepto.unidad + "</td>"; contenidoTabla[0] += "<td id='cantConcepto." + fc["idConceptoEncrypt"].ToString() + "'>" + cantidad + "</td>"; contenidoTabla[0] += "<td>" + concepto.precioUnitario + "</td>"; contenidoTabla[0] += "<td id='subtotal." + fc["idConceptoEncrypt"].ToString() + "'>" + subtotal + "</td>"; contenidoTabla[0] += "<td class='text-center'>"; contenidoTabla[0] += "<button onclick='editarCantidad(\"" + fc["idConceptoEncrypt"].ToString() + "\",\"" + cantidad + "\",\"" + concepto.descripcion + "\");' class='btn btn-success'>Editar <i class='fa fa-edit'></i></button>"; contenidoTabla[0] += "<button onclick='quitarConcepto(\"" + fc["idConceptoEncrypt"].ToString() + "\",\"" + concepto.descripcion + "\");' class='btn btn-danger'>Quitar <i class='fa fa-trash'></i></button>"; contenidoTabla[0] += "</td>"; contenidoTabla[0] += "</tr>"; //Footer de la tabla contenidoTabla[1] = "<tr>"; contenidoTabla[1] += "<td colspan='5' class='text-muted font-weight-bolder'>TOTAL</td>"; contenidoTabla[1] += "<td class='text-muted font-weight-bolder' id='total'>" + total + "</td>"; if (fechaPropuesta >= DateTime.Now) { contenidoTabla[1] += "<td class='text-muted font-weight-bolder'></td>"; } contenidoTabla[1] += "</tr>"; //IDConcepto AGREGADO contenidoTabla[2] = IDConcepto.ToString(); //cantidad AGREGADA contenidoTabla[3] = cantidad.ToString(); db.Dispose(); return(Json(contenidoTabla)); } catch (Exception) { contenidoTabla[0] = "error"; contenidoTabla[1] = "error"; db.Dispose(); return(Json(contenidoTabla)); } } }
public ActionResult Index(FormCollection fc) { int idLicitacion; MethodEncrypt me = new MethodEncrypt(); LicitacionesRequisicionesViewModel model = new LicitacionesRequisicionesViewModel(); List <CatalogoConceptosViewModel> lstConceptos = new List <CatalogoConceptosViewModel>(); List <CatalogoConceptosViewModel> lstUnidades = new List <CatalogoConceptosViewModel>(); List <LicitacionesRequisicionesViewModel> lstRequisiciones = new List <LicitacionesRequisicionesViewModel>(); using (var db = new sgopEntities()) { try { idLicitacion = Convert.ToInt32(fc["idLicitacion"].ToString()); var licitacion = db.licitaciones.Where(lic => lic.idLicitacion == idLicitacion).First(); var municipio = db.catalogoMunicipios.Where(mun => mun.idMunicipio == licitacion.idMunicipio).First(); var empresa = db.catalogoEmpresas.Where(emp => emp.idEmpresa == licitacion.idEmpresa).First(); model.idLicitacion = licitacion.idLicitacion; model.idLicitacionEncrypt = me.getEncrypt(fc["idLicitacion"].ToString()); model.idEmpresa = licitacion.idEmpresa; model.razonSocial = empresa.razonSocial; model.noLicitacion = licitacion.noLicitacion; model.nombreObra = licitacion.nombreObra; model.idMunicipio = licitacion.idMunicipio; model.nombreMunicipio = municipio.descripcion; model.localidad = licitacion.localidad; model.fechaVisita = licitacion.fechaVisita; model.fechaAclaraciones = licitacion.fechaAclaraciones; model.fechaPropuesta = licitacion.fechaPropuesta; model.fechaFallo = licitacion.fechaFallo; model.actaVisita = licitacion.actaVisita; model.actaAclaraciones = licitacion.actaAclaraciones; model.actaPropuesta = licitacion.actaPropuesta; model.actaFallo = licitacion.actaFallo; model.idEstatus = licitacion.idEstatus; model.idRequisicion = licitacion.idRequisicion; model.fechaCreacion = licitacion.fechaCreacion; model.usuarioCreacion = licitacion.usuarioCreacion; model.fechaModificacion = licitacion.fechaModificacion; model.usuarioModificacion = licitacion.usuarioModificacion; lstConceptos = (from cc in db.catalogoConceptos select new CatalogoConceptosViewModel { idConcepto = cc.idConcepto, idConceptoEncrypt = "", clave = cc.clave, descripcion = cc.descripcion, unidad = cc.unidad, precioUnitario = cc.precioUnitario }).ToList(); lstUnidades = (from c in db.catalogoConceptos orderby c.unidad ascending select new CatalogoConceptosViewModel { unidad = c.unidad }).Distinct().ToList(); lstRequisiciones = (from req in db.requisiciones join con in db.catalogoConceptos on req.idConcepto equals con.idConcepto where req.idRequisicionRango == licitacion.idRequisicion select new LicitacionesRequisicionesViewModel { idRequisicion = req.idRequisicion, idRequisicionRango = req.idRequisicionRango, idConcepto = req.idConcepto, idConceptoEncrypt = "", cantidad = req.cantidad, total = req.total, clave = con.clave, descripcion = con.descripcion, unidad = con.unidad, precioUnitario = con.precioUnitario }).ToList(); foreach (var item in lstRequisiciones) { item.idConceptoEncrypt = me.getEncrypt(item.idConcepto.ToString()); } ViewBag.lstConceptos = lstConceptos; ViewBag.lstRequisiciones = lstRequisiciones; ViewBag.lstUnidades = lstUnidades; db.Dispose(); } catch (Exception) { db.Dispose(); return(Redirect(Url.Content("~/Home"))); } } return(View(model)); }
public ActionResult GuardaRequisicion(FormCollection fc) { using (var db = new sgopEntities()) { try { MethodEncrypt me = new MethodEncrypt(); Rangos rango = new Rangos(); int idLicitacion = Convert.ToInt32(me.getDecrypt(fc["idLicitacionEncrypt"])); JArray jsonConceptosAgregados = JArray.Parse(fc["conceptosAgregar"].ToString()); var licitacion = db.licitaciones.Where(lic => lic.idLicitacion == idLicitacion).First(); List <RequisicionesMaterialesViewModel> lstMateriales = new List <RequisicionesMaterialesViewModel>(); int idRequisicionRango = (int)licitacion.idRequisicion; //Si la licitacion no tiene agregada la requisicion obtiene una nueva if (idRequisicionRango == 0) { idRequisicionRango = rango.getSiguienteID("REQUISICIONES"); //Actualiza la requisicion de la licitacion licitacion.idRequisicion = idRequisicionRango; db.Entry(licitacion).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } else { var requisicionesList = (db.requisiciones.Where(req => req.idRequisicionRango == idRequisicionRango)).ToList(); var reqMatList = db.requisicionesMateriales.Where(reqMat => reqMat.idRequisicion == idRequisicionRango).ToList(); //Si la cantidad de la lista enviada es diferente a la cantidad de las requisiciones que hay en la base de datos //Entonces elimina todas las requisiciones totales y materiales if (requisicionesList.Count != jsonConceptosAgregados.Count) { //Requisiciones totales foreach (var item in requisicionesList) { int? idConcepto = item.idConcepto; requisiciones requisicion = db.requisiciones.Where(req => req.idConcepto == idConcepto && req.idRequisicionRango == idRequisicionRango).First(); db.requisiciones.Remove(requisicion); db.SaveChanges(); } //Requisiciones Materiales foreach (var item in reqMatList) { requisicionesMateriales requisicionMat = db.requisicionesMateriales.Where(reqMat => reqMat.idRequisicion == idRequisicionRango).First(); db.requisicionesMateriales.Remove(requisicionMat); db.SaveChanges(); } } } for (int i = 0; i < jsonConceptosAgregados.Count; i++) { int idConcepto = Convert.ToInt32(jsonConceptosAgregados[i]["idConcepto"]); double cantidad = Convert.ToDouble(jsonConceptosAgregados[i]["cantidad"]); //Trae la requisicion donde haya ese idConcepto y ese idRequisicion try { //Si la encuentra, actualiza la cantidad de la requisicion con ese idConcepto y ese idRequisicion var requisicion = db.requisiciones.Where(r => r.idConcepto == idConcepto && r.idRequisicionRango == idRequisicionRango).First(); requisicion.cantidad = cantidad; db.Entry(requisicion).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); //Trae la lista de las requisiciones materiales para ese idConcepto y idRequisicion var requisicionMatLista = db.requisicionesMateriales.Where(rm => rm.idConcepto == idConcepto && rm.idRequisicion == idRequisicionRango).ToList(); //Recorre la lista foreach (var reqm in requisicionMatLista) { //Busca en la tabla relacionConceptosMateriales el idConcepto y idMaterial para obtener la cantidad necesaria var relConcMat = db.relacionConceptosMateriales.Where(rcm => rcm.idConcepto == idConcepto && rcm.idMaterial == reqm.idMaterial).First(); //Busca la requisicionMaterial que se va a actualizar var requisicionMat = db.requisicionesMateriales.Find(reqm.idRequisicionMaterial); requisicionMat.total = cantidad * relConcMat.cantidad;//Actualiza el total db.Entry(requisicionMat).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } } catch (Exception) { //Si no la encuentra, guarda una nueva requisicion con ese idConcepto y ese idRequisicion var concepto = db.catalogoConceptos.Find(idConcepto); requisiciones tRequisiciones = new requisiciones(); tRequisiciones.idRequisicionRango = idRequisicionRango; tRequisiciones.idConcepto = idConcepto; tRequisiciones.cantidad = cantidad; tRequisiciones.total = concepto.precioUnitario * cantidad; db.requisiciones.Add(tRequisiciones); db.SaveChanges(); //Obtiene todos los materiales que se necesitan para ese idConcepto lstMateriales = (from mat in db.relacionConceptosMateriales where mat.idConcepto == idConcepto select new RequisicionesMaterialesViewModel { idRelacion = mat.idRelacion, idConcepto = mat.idConcepto, idMaterial = mat.idMaterial, cantidadMaterial = mat.cantidad }).ToList(); foreach (var relacion in lstMateriales) { requisicionesMateriales tReqMat = new requisicionesMateriales(); tReqMat.idRequisicion = idRequisicionRango; tReqMat.idConcepto = idConcepto; tReqMat.idMaterial = relacion.idMaterial; tReqMat.total = cantidad * relacion.cantidadMaterial; db.requisicionesMateriales.Add(tReqMat); db.SaveChanges(); } } } db.Dispose(); return(Content("requisicionGuardada")); } catch (Exception) { db.Dispose(); return(Content("noExisteLicitacion")); } } }
public ActionResult getPaggedDataConceptos(int pageNumber = 1, int pageSize = 10, string busqueda = "", string buscarPor = "", string conceptosAgregados = "") { List <CatalogoConceptosViewModel> listConceptos = new List <CatalogoConceptosViewModel>(); List <CatalogoConceptosViewModel> listConceptosAux = new List <CatalogoConceptosViewModel>(); List <CatalogoConceptosViewModel> listConceptosAux2 = new List <CatalogoConceptosViewModel>(); List <CatalogoConceptosViewModel> listConceptosAux3 = new List <CatalogoConceptosViewModel>(); MethodEncrypt me = new MethodEncrypt(); using (var db = new sgopEntities()) { if (busqueda.Equals("")) { listConceptos = (from cc in db.catalogoConceptos select new CatalogoConceptosViewModel { idConcepto = cc.idConcepto, idConceptoEncrypt = "", clave = cc.clave, descripcion = cc.descripcion, unidad = cc.unidad, precioUnitario = cc.precioUnitario }).ToList(); foreach (var item in listConceptos) { item.idConceptoEncrypt = me.getEncrypt(item.idConcepto.ToString()); } listConceptosAux = listConceptos; } else { listConceptos = (from cc in db.catalogoConceptos select new CatalogoConceptosViewModel { idConcepto = cc.idConcepto, idConceptoEncrypt = "", clave = cc.clave, descripcion = cc.descripcion, unidad = cc.unidad, precioUnitario = cc.precioUnitario }).ToList(); foreach (var item in listConceptos) { item.idConceptoEncrypt = me.getEncrypt(item.idConcepto.ToString()); if (item.clave.ToLower().Contains(busqueda.ToLower()) || item.descripcion.ToLower().Contains(busqueda.ToLower())) { listConceptosAux.Add(item); } } } if (buscarPor.Equals("todas")) { if (conceptosAgregados == "") { var pagedData = Pagination.PagedResult(listConceptosAux, pageNumber, pageSize); db.Dispose(); return(Json(pagedData, JsonRequestBehavior.AllowGet)); } else { JArray jsonConceptos = JArray.Parse(conceptosAgregados); listConceptosAux2 = listConceptosAux; for (int i = 0; i < jsonConceptos.Count; i++) { foreach (var item in listConceptosAux) { if (item.idConcepto == Convert.ToInt32(jsonConceptos[i]["idConcepto"])) { listConceptosAux2.Remove(item); break; } } } var pagedData = Pagination.PagedResult(listConceptosAux2, pageNumber, pageSize); db.Dispose(); return(Json(pagedData, JsonRequestBehavior.AllowGet)); } } else { foreach (var item in listConceptosAux) { if (item.unidad.ToLower().Equals(buscarPor.ToLower())) { listConceptosAux2.Add(item); } } if (conceptosAgregados == "") { var pagedData = Pagination.PagedResult(listConceptosAux2, pageNumber, pageSize); db.Dispose(); return(Json(pagedData, JsonRequestBehavior.AllowGet)); } else { JArray jsonConceptos = JArray.Parse(conceptosAgregados); listConceptosAux3 = listConceptosAux2; for (int i = 0; i < jsonConceptos.Count; i++) { foreach (var item in listConceptosAux2) { if (item.idConcepto == Convert.ToInt32(jsonConceptos[i]["idConcepto"])) { listConceptosAux3.Remove(item); break; } } } var pagedData = Pagination.PagedResult(listConceptosAux3, pageNumber, pageSize); db.Dispose(); return(Json(pagedData, JsonRequestBehavior.AllowGet)); } } } }
// GET: EjecucionesMensuales public ActionResult Index() { using (var db = new sgopEntities()) { try { int idLicitacion = Convert.ToInt32(100002); //Del idLicitacion se obtiene el idRequisicion var requisicion = db.licitaciones.Where(req => req.idLicitacion == idLicitacion).First(); int idRequisicion = (int)requisicion.idRequisicion; //Del idLicitacion se obtiene el mes del contrato y el año del contrato var proyecto = db.proyectos.Where(proy => proy.idLicitacion == idLicitacion).First(); ViewBag.mesContrato = proyecto.fechaInicioContrato.Value.Month; ViewBag.anioContrato = proyecto.fechaInicioContrato.Value.Year; List <LicitacionesRequisicionesViewModel> lstConceptosEnRequisicion = new List <LicitacionesRequisicionesViewModel>(); List <EjecucionesMensualesViewModel> lstEjecuciones = new List <EjecucionesMensualesViewModel>(); LicitacionesRequisicionesViewModel model = new LicitacionesRequisicionesViewModel(); MethodEncrypt me = new MethodEncrypt(); //Obtiene la lista de conceptos que hay en esa requisicion ViewBag.lstConceptosEnRequisicion = (from req in db.requisiciones join conc in db.catalogoConceptos on req.idConcepto equals conc.idConcepto where req.idRequisicionRango == idRequisicion select new LicitacionesRequisicionesViewModel { idRequisicionRango = req.idRequisicionRango, idConcepto = req.idConcepto, cantidad = req.cantidad, total = req.total, descripcion = conc.descripcion, clave = conc.clave, unidad = conc.unidad, precioUnitario = conc.precioUnitario }).ToList(); //sirve para saber cuantas columnas se van a agregar a la tabla var lstEjecuciones2 = (from em in db.ejecucionesMensuales group em by em.idConcepto into g select new EjecucionesMensualesViewModel { idConcepto = g.Key, cantidad = 0 }).ToList(); //Obtiene la lista de ejecuciones mensuales que hay con esa requisicion lstEjecuciones = (from eM in db.ejecucionesMensuales join cc in db.catalogoConceptos on eM.idConcepto equals cc.idConcepto where eM.idRequisicion == idRequisicion select new EjecucionesMensualesViewModel { idEjecucion = eM.idEjecucion, periodo = eM.periodo, idRequisicion = eM.idRequisicion, idConcepto = eM.idConcepto, cantidad = eM.cantidad, clave = cc.clave, periodoMes = 0, periodoAnio = 0 }).ToList(); //sirve para saber cuantas columnas se van a agregar a la tabla foreach (var item in lstEjecuciones2) { foreach (var item2 in lstEjecuciones) { if (item.idConcepto == item2.idConcepto) { item.cantidad += 1; } } } //Descompone el periodo en mes y año foreach (var item in lstEjecuciones) { item.periodoMes = Convert.ToInt32(item.periodo.Substring(0, 2)); item.periodoAnio = Convert.ToInt32(item.periodo.Substring(3, 2)); } ViewBag.lstEjecuciones = lstEjecuciones; ViewBag.cantColumnas = lstEjecuciones2.Max(e => e.cantidad);//Cantidad de columnas a agregar var licitacion = db.licitaciones.Where(lic => lic.idLicitacion == idLicitacion).First(); var municipio = db.catalogoMunicipios.Where(mun => mun.idMunicipio == licitacion.idMunicipio).First(); var empresa = db.catalogoEmpresas.Where(emp => emp.idEmpresa == licitacion.idEmpresa).First(); model.idLicitacion = licitacion.idLicitacion; model.idLicitacionEncrypt = me.getEncrypt(licitacion.idLicitacion.ToString()); model.idRequisicionRango = licitacion.idRequisicion; model.idEmpresa = licitacion.idEmpresa; model.razonSocial = empresa.razonSocial; model.noLicitacion = licitacion.noLicitacion; model.nombreObra = licitacion.nombreObra; model.idMunicipio = licitacion.idMunicipio; model.nombreMunicipio = municipio.descripcion; model.localidad = licitacion.localidad; model.fechaVisita = licitacion.fechaVisita; model.fechaAclaraciones = licitacion.fechaAclaraciones; model.fechaPropuesta = licitacion.fechaPropuesta; model.fechaFallo = licitacion.fechaFallo; model.actaVisita = licitacion.actaVisita; model.actaAclaraciones = licitacion.actaAclaraciones; model.actaPropuesta = licitacion.actaPropuesta; model.actaFallo = licitacion.actaFallo; model.idEstatus = licitacion.idEstatus; model.idRequisicion = licitacion.idRequisicion; model.fechaCreacion = licitacion.fechaCreacion; model.usuarioCreacion = licitacion.usuarioCreacion; model.fechaModificacion = licitacion.fechaModificacion; model.usuarioModificacion = licitacion.usuarioModificacion; db.Dispose(); return(View(model)); } catch (Exception) { db.Dispose(); return(Content("noExisteLicitacion")); } } }
public ActionResult CambiaRequisicion(FormCollection fc) { int idMaterialAdd = 0; string contenido = ""; double acumulado = 0; int noRequisicion = 0;//0 cuando sea nueva int idLicitacion = Convert.ToInt32(fc["idLicitacion"]); int idRequisicion = Convert.ToInt32(fc["idRequisicion"]); MethodEncrypt me = new MethodEncrypt(); try { noRequisicion = Convert.ToInt32(fc["noRequisicion"]); } catch (Exception) {} List <LicitacionesRequisicionesViewModel> lstRequisicionesDistinct = new List <LicitacionesRequisicionesViewModel>(); List <LicitacionesRequisicionesViewModel> lstRequisiciones = new List <LicitacionesRequisicionesViewModel>(); List <RequisicionesParcialesViewModel> lstReqParciales = new List <RequisicionesParcialesViewModel>(); List <RequisicionesParcialesViewModel> lstReqParciales2 = new List <RequisicionesParcialesViewModel>(); List <RequisicionesParcialesJson> lista = new List <RequisicionesParcialesJson>(); using (var db = new sgopEntities()) { //Obtiene todas las requisiciones parciales con el noRequisicion enviado y el idRequisicion *Nueva lstReqParciales = (from reqp in db.requisicionesParciales join mat in db.catalogoMateriales on reqp.idMaterial equals mat.idMaterial join cc in db.catalogoConceptos on reqp.idConcepto equals cc.idConcepto where reqp.idRequisicion == idRequisicion && reqp.noRequisicion == noRequisicion select new RequisicionesParcialesViewModel { idRequisicionParcial = reqp.idRequisicionParcial, idRequisicionRango = reqp.idRequisicion, idRequisicionRangoEncrypt = "", noRequisicion = reqp.noRequisicion, idConcepto = reqp.idConcepto, idMaterial = reqp.idMaterial, cantidad = reqp.cantidad, aprobada = reqp.aprobada, descripcionMaterial = mat.descripcion, claveConcepto = cc.clave, descripcionConcepto = cc.descripcion, unidadConcepto = cc.unidad, precioUnitario = cc.precioUnitario, cantReqXcantMat = 0, cantidadDisponible = 0 }).ToList(); //Obtiene todas las requisiciones parciales con el idRequisicion (sirve para cuando se envía requisicion nueva) lstReqParciales2 = (from reqp in db.requisicionesParciales join mat in db.catalogoMateriales on reqp.idMaterial equals mat.idMaterial join cc in db.catalogoConceptos on reqp.idConcepto equals cc.idConcepto where reqp.idRequisicion == idRequisicion select new RequisicionesParcialesViewModel { idRequisicionParcial = reqp.idRequisicionParcial, idRequisicionRango = reqp.idRequisicion, idRequisicionRangoEncrypt = "", noRequisicion = reqp.noRequisicion, idConcepto = reqp.idConcepto, idMaterial = reqp.idMaterial, cantidad = reqp.cantidad, aprobada = reqp.aprobada, descripcionMaterial = mat.descripcion, claveConcepto = cc.clave, descripcionConcepto = cc.descripcion, unidadConcepto = cc.unidad, precioUnitario = cc.precioUnitario, cantReqXcantMat = 0, cantidadDisponible = 0 }).ToList(); //Recorre la lista de requisiciones parciales para guardar las cantidades totales *Nueva foreach (var item in lstReqParciales) { //Busca en la relacionConceptosMateriales el idConcepto y idMaterial, para obtener la cantidad necesaria de material para ese concepto por unidad var relConcMat = db.relacionConceptosMateriales.Where(au => au.idConcepto == item.idConcepto && au.idMaterial == item.idMaterial).First(); //Busca en las requisiciones el idConcepto y el idRequisicionRango, para obtener la cantidad que se necesita de ese concepto var req = db.requisiciones.Where(au => au.idConcepto == item.idConcepto && au.idRequisicionRango == idRequisicion).First(); item.idRequisicionRangoEncrypt = me.getEncrypt(item.idRequisicionRango.ToString()); //Encripta el idRequisicion item.cantReqXcantMat = relConcMat.cantidad * req.cantidad; //Guarda la cantidad total de ese concepto a requerir item.cantidadDisponible = item.cantReqXcantMat; //La cantidad disponible es la misma de la multiplicacion (mas adelante se actualiza) } //Recorre la lista de las requisiciones parciales encontradas para poner el acumulado *Nueva foreach (var reqPar in lstReqParciales) { //Recorre la lista de requisiciones parciales encontradas para poner el acumulado foreach (var reqParcDi in lstReqParciales) { //Compara el idConcepto y idMaterial de ambas listas if (reqPar.idConcepto == reqParcDi.idConcepto && reqPar.idMaterial == reqParcDi.idMaterial) { acumulado += (double)reqParcDi.cantidad;//Guarda la cantidad de la requisicion parcial } } reqPar.cantidadDisponible -= acumulado;//A la cantidad disponible le resta la misma cantidad menos el acumulado acumulado = 0; } //Recorre la lista de requisiciones parciales para guardar las cantidades totales foreach (var item in lstReqParciales2) { //Busca en la relacionConceptosMateriales el idConcepto y idMaterial, para obtener la cantidad necesaria de material para ese concepto por unidad var relConcMat = db.relacionConceptosMateriales.Where(au => au.idConcepto == item.idConcepto && au.idMaterial == item.idMaterial).First(); //Busca en las requisiciones el idConcepto y el idRequisicionRango, para obtener la cantidad que se necesita de ese concepto var req = db.requisiciones.Where(au => au.idConcepto == item.idConcepto && au.idRequisicionRango == idRequisicion).First(); item.idRequisicionRangoEncrypt = me.getEncrypt(item.idRequisicionRango.ToString()); //Encripta el idRequisicion item.cantReqXcantMat = relConcMat.cantidad * req.cantidad; //Guarda la cantidad total de ese concepto a requerir item.cantidadDisponible = item.cantReqXcantMat; //La cantidad disponible es la misma de la multiplicacion (mas adelante se actualiza) } //Recorre la lista de las requisiciones parciales encontradas para poner el acumulado foreach (var reqPar in lstReqParciales2) { //Recorre la lista de las requisiciones parciales encontradas para poner el acumulado foreach (var reqParcDi in lstReqParciales2) { //Compara el idConcepto y idMaterial de ambas listas if (reqPar.idConcepto == reqParcDi.idConcepto && reqPar.idMaterial == reqParcDi.idMaterial) { acumulado += (double)reqParcDi.cantidad;//Guarda la cantidad de la requisicion parcial } } reqPar.cantidadDisponible -= acumulado;//A la cantidad disponible le resta la misma cantidad menos el acumulado acumulado = 0; } //Recorre la lista de las requisiciones parciales encontradas para poner el acumulado *Nueva foreach (var reqPar in lstReqParciales) { foreach (var reqPar2 in lstReqParciales2) { if (reqPar2.idConcepto == reqPar.idConcepto && reqPar2.idMaterial == reqPar.idMaterial && reqPar2.noRequisicion == reqPar.noRequisicion) { reqPar.cantidadDisponible = reqPar2.cantidadDisponible; break; } } } lstRequisicionesDistinct = (from req in db.requisiciones join rcm in db.relacionConceptosMateriales on req.idConcepto equals rcm.idConcepto join cm in db.catalogoMateriales on rcm.idMaterial equals cm.idMaterial join con in db.catalogoConceptos on req.idConcepto equals con.idConcepto where req.idRequisicionRango == idRequisicion select new LicitacionesRequisicionesViewModel { idConcepto = req.idConcepto }).Distinct().ToList(); lstRequisiciones = (from req in db.requisiciones join rcm in db.relacionConceptosMateriales on req.idConcepto equals rcm.idConcepto join cm in db.catalogoMateriales on rcm.idMaterial equals cm.idMaterial join con in db.catalogoConceptos on req.idConcepto equals con.idConcepto where req.idRequisicionRango == idRequisicion select new LicitacionesRequisicionesViewModel { idRequisicion = req.idRequisicion, idRequisicionRango = req.idRequisicionRango, idRequisicionEncrypt = "", idConcepto = req.idConcepto, idConceptoEncrypt = "", cantReq = req.cantidad, cantMat = rcm.cantidad, cantReqXcantMat = 0, total = req.total, clave = con.clave, descripcion = con.descripcion, descripcionMaterial = cm.descripcion, unidad = con.unidad, precioUnitario = con.precioUnitario, idMaterial = cm.idMaterial, cantDisponible = 0 }).ToList(); foreach (var item in lstRequisiciones) { item.idConceptoEncrypt = me.getEncrypt(item.idConcepto.ToString()); item.idRequisicionEncrypt = me.getEncrypt(item.idRequisicionRango.ToString()); item.cantReqXcantMat = item.cantReq * item.cantMat; item.cantDisponible = item.cantReqXcantMat; } //Recorre la lista de las requisiciones parciales encontradas para poner el acumulado foreach (var reqPar in lstReqParciales2) { foreach (var reqPar2 in lstRequisiciones) { if (reqPar2.idConcepto == reqPar.idConcepto && reqPar2.idMaterial == reqPar.idMaterial) { reqPar2.cantReqXcantMat = reqPar.cantidadDisponible; break; } } } } foreach (var item in lstRequisicionesDistinct) { //PINTA EL CONCEPTO foreach (var item2 in lstRequisiciones) { if (item.idConcepto == item2.idConcepto) { contenido += "<tr class='bg-dark' style='color:white;'>"; contenido += "<td>" + item2.clave + "</td>"; contenido += "<td colspan='5'>" + item2.descripcion + "</td>"; contenido += "</tr>"; break; } } //PINTA LOS MATERIALES foreach (var item2 in lstRequisiciones) { if (item.idConcepto == item2.idConcepto) { if (noRequisicion != 0) { foreach (var reqParc in lstReqParciales) { if (item2.idConcepto == reqParc.idConcepto && item2.idMaterial == reqParc.idMaterial) { idMaterialAdd = (int)item2.idMaterial; contenido += "<tr class='bg-light'>"; contenido += "<td>"; if (!reqParc.aprobada.Equals("1")) { contenido += "<div class='btn-group'>"; if (reqParc.cantidad != 0) { contenido += "<button title='Aprobar la requisición' class='btn btn-primary btn-sm rounded' type='button' id='btnAprobar." + reqParc.idConcepto + "." + reqParc.idMaterial + "' onclick='aprobarReq(\"" + reqParc.idConcepto + "\",\"" + reqParc.idMaterial + "\", \"" + reqParc.descripcionMaterial + "\" , " + reqParc.cantidad + "); '><i class='fa fa-check-circle'></i> Aprobar</button>"; contenido += "<button title='Agregar cantidad de material' class='btn btn-success btn-sm rounded' type='button' style='display:none;' id='btnAgregar." + reqParc.idConcepto + "." + reqParc.idMaterial + "' onclick='agregaRequisicionTabla(\"" + reqParc.idConcepto + "\",\"" + reqParc.idMaterial + "\", \"" + reqParc.descripcionMaterial + "\"," + reqParc.cantidadDisponible + ");'><i class='fa fa-plus-circle'></i> Agregar</button>"; contenido += "<button title='Quitar la cantidad de material' class='btn btn-danger btn-sm rounded' type='button' id='btnQuitar." + reqParc.idConcepto + "." + reqParc.idMaterial + "' onclick='quitaRequisicionTabla(\"" + reqParc.idConcepto + "\",\"" + reqParc.idMaterial + "\");'><i class='fa fa-times-circle'></i> Quitar</button>"; } else { contenido += "<button title='Agregar cantidad de material' class='btn btn-success btn-sm rounded' type='button' id='btnAgregar." + reqParc.idConcepto + "." + reqParc.idMaterial + "' onclick='agregaRequisicionTabla(\"" + reqParc.idConcepto + "\",\"" + reqParc.idMaterial + "\", \"" + reqParc.descripcionMaterial + "\", " + reqParc.cantidadDisponible + ");'><i class='fa fa-plus-circle'></i> Agregar</button>"; contenido += "<button title='Quitar la cantidad de material' class='btn btn-danger btn-sm rounded' type='button' style='display:none;' id='btnQuitar." + reqParc.idConcepto + "." + reqParc.idMaterial + "' onclick='quitaRequisicionTabla(\"" + reqParc.idConcepto + "\",\"" + reqParc.idMaterial + "\");'><i class='fa fa-times-circle'></i> Quitar</button>"; } contenido += "</div>"; } else { contenido += "<strong><a href='#' style='color:black;' title='Ver N° Documento'>REQUISICIÓN APROBADA</a></strong>"; } contenido += "</td>"; contenido += "<td>" + reqParc.descripcionMaterial + "</td>"; contenido += "<td class='text-center'>" + reqParc.cantReqXcantMat + "</td>"; if (reqParc.cantidadDisponible > 0) { contenido += "<td class='text-center' id='campoDisponible." + reqParc.idConcepto + "." + reqParc.idMaterial + "'>" + reqParc.cantidadDisponible + "</td>"; } else { contenido += "<td class='text-center text-danger' id='campoDisponible." + reqParc.idConcepto + "." + reqParc.idMaterial + "'>" + reqParc.cantidadDisponible + "</td>"; } contenido += "<td class='text-center' id='campoRequisicion." + reqParc.idConcepto + "." + reqParc.idMaterial + "'>" + reqParc.cantidad + " </td>"; contenido += "</tr>"; break; } } if (item2.idMaterial != idMaterialAdd) { contenido += "<tr class='bg-light'>"; contenido += "<td>"; contenido += "<div class='btn-group'>"; contenido += "<button class='btn btn-success btn-sm rounded' type='button' id='btnAgregar." + item2.idConcepto + "." + item2.idMaterial + "' onclick='agregaRequisicionTabla(\"" + item2.idConcepto + "\",\"" + item2.idMaterial + "\", \"" + item2.descripcionMaterial + "\", " + item2.cantReqXcantMat + ");'><i class='fa fa-plus-circle'></i> Agregar</button>"; contenido += "<button class='btn btn-danger btn-sm rounded' type='button' id='btnQuitar." + item2.idConcepto + "." + item2.idMaterial + "' style='display:none;' onclick='quitaRequisicionTabla(\"" + item2.idConcepto + "\",\"" + item2.idMaterial + "\");'><i class='fa fa-times-circle'></i> Quitar</button>"; contenido += "</div>"; contenido += "</td>"; contenido += "<td>" + item2.descripcionMaterial + "</td>"; contenido += "<td class='text-center'>" + item2.cantDisponible + "</td>"; if (item2.cantReqXcantMat > 0) { contenido += "<td class='text-center' id='campoDisponible." + item2.idConcepto + "." + item2.idMaterial + "'>" + item2.cantReqXcantMat + "</td>"; } else { contenido += "<td class='text-center text-danger' id='campoDisponible." + item2.idConcepto + "." + item2.idMaterial + "'>" + item2.cantReqXcantMat + "</td>"; } contenido += "<td class='text-center' id='campoRequisicion." + item2.idConcepto + "." + item2.idMaterial + "'>0</td>"; contenido += "</tr>"; idMaterialAdd = 0; } } else { contenido += "<tr class='bg-light'>"; contenido += "<td>"; contenido += "<div class='btn-group'>"; contenido += "<button class='btn btn-success btn-sm rounded' type='button' id='btnAgregar." + item2.idConcepto + "." + item2.idMaterial + "' onclick='agregaRequisicionTabla(\"" + item2.idConcepto + "\",\"" + item2.idMaterial + "\", \"" + item2.descripcionMaterial + "\", " + item2.cantReqXcantMat + ");'><i class='fa fa-plus-circle'></i> Agregar</button>"; contenido += "<button class='btn btn-danger btn-sm rounded' type='button' id='btnQuitar." + item2.idConcepto + "." + item2.idMaterial + "' style='display:none;' onclick='quitaRequisicionTabla(\"" + item2.idConcepto + "\",\"" + item2.idMaterial + "\");'><i class='fa fa-times-circle'></i> Quitar</button>"; contenido += "</div>"; contenido += "</td>"; contenido += "<td>" + item2.descripcionMaterial + "</td>"; contenido += "<td class='text-center'>" + item2.cantDisponible + "</td>"; if (item2.cantReqXcantMat > 0) { contenido += "<td class='text-center' id='campoDisponible." + item2.idConcepto + "." + item2.idMaterial + "'>" + item2.cantReqXcantMat + "</td>"; } else { contenido += "<td class='text-center text-danger' id='campoDisponible." + item2.idConcepto + "." + item2.idMaterial + "'>" + item2.cantReqXcantMat + "</td>"; } contenido += "<td class='text-center' id='campoRequisicion." + item2.idConcepto + "." + item2.idMaterial + "'>0</td>"; contenido += "</tr>"; } } } } foreach (var item in lstReqParciales) { RequisicionesParcialesJson obj = new RequisicionesParcialesJson(); obj.idConcepto = (int)item.idConcepto; obj.idMaterial = (int)item.idMaterial; obj.cantidad = (double)item.cantidad; obj.disponible = (double)item.cantidadDisponible; obj.agregado = "1"; lista.Add(obj); } if (noRequisicion != 0) { } return(Json(new { contenido, lista })); }
public ActionResult GuardaRequisicion(FormCollection fc) { MethodEncrypt me = new MethodEncrypt(); List <RequisicionesParcialesViewModel> lstReqParciales = new List <RequisicionesParcialesViewModel>(); int idLicitacion = 0; int idRequisicion = 0; int hayRequisiciones = 0; int noReqInt = 1; JArray jsonRequisiciones = null; //VERIFICA QUE EXISTA LA LICITACION Y LA REQUISICION using (var db = new sgopEntities()) { try { idLicitacion = Convert.ToInt32(fc["idLicitacion"]); db.licitaciones.Where(lic => lic.idLicitacion == idLicitacion).First(); idRequisicion = Convert.ToInt32(fc["idRequisicion"]); db.licitaciones.Where(lic => lic.idLicitacion == idLicitacion && lic.idRequisicion == idRequisicion).First(); db.Dispose(); } catch (Exception) { db.Dispose(); return(Content("noExisteLicitacionReq")); } } //VERIFICA SI ES REQUISICION NUEVA O YA EXISTENTE if (fc["noRequisicion"] != null && fc["noRequisicion"].Equals("nueva")) { jsonRequisiciones = JArray.Parse(fc["requisicionesAgregadas"].ToString()); if (jsonRequisiciones.Count == 0) { return(Content("nadaParaGuardar")); } using (var db = new sgopEntities()) { //Verifica que haya al menos un material por agregar for (int i = 0; i < jsonRequisiciones.Count; i++) { if (jsonRequisiciones[i]["agregado"].ToString().Equals("1")) { hayRequisiciones = 1; } } if (hayRequisiciones == 0) { return(Content("nadaParaGuardar")); } lstReqParciales = (from reqp in db.requisicionesParciales orderby reqp.noRequisicion descending where reqp.idRequisicion == idRequisicion select new RequisicionesParcialesViewModel { noRequisicion = reqp.noRequisicion }).Distinct().ToList(); foreach (var item in lstReqParciales) { noReqInt += 1; } for (int i = 0; i < jsonRequisiciones.Count; i++) { //Si no se eliminó de la tabla, agrega la requisicion if (jsonRequisiciones[i]["agregado"].ToString().Equals("1")) { int idConcepto = Convert.ToInt32(jsonRequisiciones[i]["idConcepto"]); int idMaterial = Convert.ToInt32(jsonRequisiciones[i]["idMaterial"]); double cantidad = Convert.ToDouble(jsonRequisiciones[i]["cantidad"]); requisicionesParciales tReqParc = new requisicionesParciales(); tReqParc.idRequisicion = idRequisicion; tReqParc.noRequisicion = noReqInt; tReqParc.idConcepto = idConcepto; tReqParc.idMaterial = idMaterial; tReqParc.cantidad = cantidad; tReqParc.aprobada = "0"; db.requisicionesParciales.Add(tReqParc); db.SaveChanges(); } } } } else { jsonRequisiciones = JArray.Parse(fc["requisicionesAgregadas"].ToString()); if (jsonRequisiciones.Count == 0) { return(Content("nadaParaGuardar")); } try { noReqInt = Convert.ToInt32(fc["noRequisicion"]); } catch (Exception) { return(Content("noExisteLicitacionReq")); } using (var db = new sgopEntities()) { for (int i = 0; i < jsonRequisiciones.Count; i++) { int idConcepto = Convert.ToInt32(jsonRequisiciones[i]["idConcepto"]); int idMaterial = Convert.ToInt32(jsonRequisiciones[i]["idMaterial"]); double cantidad = Convert.ToDouble(jsonRequisiciones[i]["cantidad"]); //Si existe la requisicion parcial con el idRequisicion, noRequisicion, idConcepto y idMaterial enviados //Actualiza la requisicion try { //Si no se eliminó de la tabla, actualiza la cantidad de la requisicion if (jsonRequisiciones[i]["agregado"].ToString().Equals("1")) { var reqParc = db.requisicionesParciales.Where(rp => rp.idRequisicion == idRequisicion && rp.noRequisicion == noReqInt && rp.idConcepto == idConcepto && rp.idMaterial == idMaterial).First(); if (reqParc.aprobada.Equals("0")) { reqParc.cantidad = cantidad; db.Entry(reqParc).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } } //Si se eliminó de la tabla, pone la requisicion en 0 else { try { var reqParc = db.requisicionesParciales.Where(rp => rp.idRequisicion == idRequisicion && rp.noRequisicion == noReqInt && rp.idConcepto == idConcepto && rp.idMaterial == idMaterial).First(); if (reqParc.aprobada.Equals("0")) { reqParc.cantidad = 0; db.Entry(reqParc).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } } catch (Exception) { } } } //Si no existe, agrega una nueva requisicion catch (Exception) { requisicionesParciales tReqParc = new requisicionesParciales(); tReqParc.idRequisicion = idRequisicion; tReqParc.noRequisicion = noReqInt; tReqParc.idConcepto = idConcepto; tReqParc.idMaterial = idMaterial; tReqParc.cantidad = cantidad; tReqParc.aprobada = "0"; db.requisicionesParciales.Add(tReqParc); db.SaveChanges(); } } } } return(Content("requisicionGuardada")); }
public ActionResult Index(FormCollection fc) { using (var db = new sgopEntities()) { try { int idLicitacion = Convert.ToInt32(fc["idLicitacion"]); //Del idLicitacion se obtiene el idRequisicion var requisicion = db.licitaciones.Where(req => req.idLicitacion == idLicitacion).First(); int idRequisicion = (int)requisicion.idRequisicion; double acumulado = 0; LicitacionesRequisicionesViewModel model = new LicitacionesRequisicionesViewModel(); List <RequisicionesParcialesViewModel> lstReqParciales = new List <RequisicionesParcialesViewModel>(); List <RequisicionesParcialesViewModel> lstReqParcialesDistinct = new List <RequisicionesParcialesViewModel>(); List <LicitacionesRequisicionesViewModel> lstRequisiciones = new List <LicitacionesRequisicionesViewModel>(); MethodEncrypt me = new MethodEncrypt(); var licitacion = db.licitaciones.Where(lic => lic.idLicitacion == idLicitacion).First(); var municipio = db.catalogoMunicipios.Where(mun => mun.idMunicipio == licitacion.idMunicipio).First(); var empresa = db.catalogoEmpresas.Where(emp => emp.idEmpresa == licitacion.idEmpresa).First(); var proyecto = db.proyectos.Where(proy => proy.idLicitacion == idLicitacion).First(); model.idLicitacion = licitacion.idLicitacion; model.idProyecto = proyecto.idProyecto; model.idLicitacionEncrypt = me.getEncrypt(licitacion.idLicitacion.ToString()); model.idRequisicionRango = licitacion.idRequisicion; model.idEmpresa = licitacion.idEmpresa; model.razonSocial = empresa.razonSocial; model.noLicitacion = licitacion.noLicitacion; model.nombreObra = licitacion.nombreObra; model.idMunicipio = licitacion.idMunicipio; model.nombreMunicipio = municipio.descripcion; model.localidad = licitacion.localidad; model.fechaVisita = licitacion.fechaVisita; model.fechaAclaraciones = licitacion.fechaAclaraciones; model.fechaPropuesta = licitacion.fechaPropuesta; model.fechaFallo = licitacion.fechaFallo; model.actaVisita = licitacion.actaVisita; model.actaAclaraciones = licitacion.actaAclaraciones; model.actaPropuesta = licitacion.actaPropuesta; model.actaFallo = licitacion.actaFallo; model.idEstatus = licitacion.idEstatus; model.idRequisicion = licitacion.idRequisicion; model.fechaCreacion = licitacion.fechaCreacion; model.usuarioCreacion = licitacion.usuarioCreacion; model.fechaModificacion = licitacion.fechaModificacion; model.usuarioModificacion = licitacion.usuarioModificacion; //Obtiene las requisiciones parciales con el idRequisicion lstReqParciales = (from reqp in db.requisicionesParciales join mat in db.catalogoMateriales on reqp.idMaterial equals mat.idMaterial join cc in db.catalogoConceptos on reqp.idConcepto equals cc.idConcepto where reqp.idRequisicion == idRequisicion && reqp.noRequisicion == 1 select new RequisicionesParcialesViewModel { idRequisicionParcial = reqp.idRequisicionParcial, idRequisicionRango = reqp.idRequisicion, idRequisicionRangoEncrypt = "", noRequisicion = reqp.noRequisicion, idConcepto = reqp.idConcepto, idMaterial = reqp.idMaterial, cantidad = reqp.cantidad, aprobada = reqp.aprobada, descripcionMaterial = mat.descripcion, claveConcepto = cc.clave, descripcionConcepto = cc.descripcion, unidadConcepto = cc.unidad, precioUnitario = cc.precioUnitario, cantReqXcantMat = 0, cantidadDisponible = 0 }).ToList(); //Recorre la lista de requisiciones parciales para guardar las cantidades totales foreach (var item in lstReqParciales) { //Busca en la relacionConceptosMateriales el idConcepto y idMaterial, para obtener la cantidad necesaria de material para ese concepto por unidad var relConcMat = db.relacionConceptosMateriales.Where(au => au.idConcepto == item.idConcepto && au.idMaterial == item.idMaterial).First(); //Busca en las requisiciones el idConcepto y el idRequisicionRango, para obtener la cantidad que se necesita de ese concepto var req = db.requisiciones.Where(au => au.idConcepto == item.idConcepto && au.idRequisicionRango == idRequisicion).First(); item.idRequisicionRangoEncrypt = me.getEncrypt(item.idRequisicionRango.ToString()); //Encripta el idRequisicion item.cantReqXcantMat = relConcMat.cantidad * req.cantidad; //Guarda la cantidad total de ese concepto a requerir item.cantidadDisponible = item.cantReqXcantMat; //La cantidad disponible es la misma de la multiplicacion (mas adelante se actualiza) } //Recorre la lista de las requisiciones parciales encontradas foreach (var reqPar in lstReqParciales) { //Recorre la lista de requisiciones parciales encontradas foreach (var reqParcDi in lstReqParciales) { //Compara el idConcepto y idMaterial de ambas listas if (reqPar.idConcepto == reqParcDi.idConcepto && reqPar.idMaterial == reqParcDi.idMaterial) { acumulado += (double)reqParcDi.cantidad;//Guarda la cantidad de la requisicion parcial } } reqPar.cantidadDisponible -= acumulado;//A la cantidad disponible le resta la misma cantidad menos el acumulado acumulado = 0; } //Guarda esta variable para hacer el recorrido en la vista y pintar los conceptos y materiales ViewBag.lstReqParcialesDistinct = (from reqp in db.requisicionesParciales orderby reqp.noRequisicion descending where reqp.idRequisicion == idRequisicion select new RequisicionesParcialesViewModel { noRequisicion = reqp.noRequisicion }).Distinct().ToList(); //Guarda esta variable para hacer el recorrido en la vista y pintar los conceptos y materiales ViewBag.lstRequisicionesDistinct = (from req in db.requisiciones join rcm in db.relacionConceptosMateriales on req.idConcepto equals rcm.idConcepto join cm in db.catalogoMateriales on rcm.idMaterial equals cm.idMaterial join con in db.catalogoConceptos on req.idConcepto equals con.idConcepto where req.idRequisicionRango == idRequisicion select new LicitacionesRequisicionesViewModel { idConcepto = req.idConcepto }).Distinct().ToList(); //Busca los materiales necesarios para cada concepto que hay en la requisicion con el idRequisicion que se le envía lstRequisiciones = (from req in db.requisiciones join rcm in db.relacionConceptosMateriales on req.idConcepto equals rcm.idConcepto join cm in db.catalogoMateriales on rcm.idMaterial equals cm.idMaterial join con in db.catalogoConceptos on req.idConcepto equals con.idConcepto where req.idRequisicionRango == idRequisicion select new LicitacionesRequisicionesViewModel { idRequisicion = req.idRequisicion, idRequisicionRango = req.idRequisicionRango, idRequisicionEncrypt = "", idConcepto = req.idConcepto, idConceptoEncrypt = "", cantReq = req.cantidad, cantMat = rcm.cantidad, cantReqXcantMat = 0, total = req.total, clave = con.clave, descripcion = con.descripcion, descripcionMaterial = cm.descripcion, unidad = con.unidad, precioUnitario = con.precioUnitario, idMaterial = cm.idMaterial }).ToList(); foreach (var item in lstRequisiciones) { item.idConceptoEncrypt = me.getEncrypt(item.idConcepto.ToString()); //Encripta el idConcepto item.idRequisicionEncrypt = me.getEncrypt(item.idRequisicionRango.ToString()); //Encripta el idRequisicion item.cantReqXcantMat = item.cantReq * item.cantMat; //Multiplica la cantidad pedida en la requisicion por la cantidad necesaria de material } ViewBag.lstRequisiciones = lstRequisiciones; //Guarda la variable para recorrerla en la vista ViewBag.lstReqParciales = lstReqParciales; //Guarda la variable para recorrerla en la vista db.Dispose(); return(View(model)); } catch (Exception) { db.Dispose(); return(Content("noExisteLicitacion")); } } }