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));
                    }
                }
            }
        }
예제 #6
0
        // 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"));
                }
            }
        }
예제 #7
0
        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 }));
        }
예제 #8
0
        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"));
        }
예제 #9
0
        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"));
                }
            }
        }