public ActionResult Create(int id)
 {
     Session[STR_DOCUMENTOS_EXPEDIENTE_OP] = null;
     ProyectoInversion_DAL objProyectoInversion_DAL = new ProyectoInversion_DAL();
     ProyectoInversion objProyectoInversion = objProyectoInversion_DAL.ObtieneXId(id);
     CreateExpedienteTecnicoOPModel objCreateExpedienteTecnicoOPModel = new CreateExpedienteTecnicoOPModel();
     objCreateExpedienteTecnicoOPModel.IdProyecto = objProyectoInversion.IdProyecto;
     objCreateExpedienteTecnicoOPModel.NomProyecto = objProyectoInversion.Nombre;
     return View(objCreateExpedienteTecnicoOPModel);
 }
        public ActionResult Create(CreateExpedienteTecnicoOPModel pObjModel, HttpPostedFileBase documentoUpload)
        {
            if (pObjModel.TipoBotonClick == "ADJUNTAR")
            {
                if (ModelState.IsValid)
                {
                    if (documentoUpload == null)
                    {
                        ModelState.AddModelError("Err_documentoUpload", "Seleccione un archivo.");
                    }
                    else {
                        DocumentoExpTecOPModel objDocumentoExpTecOP = new DocumentoExpTecOPModel();
                        List<DocumentoExpedienteTecnicoOP> lstDocumentos = (List<DocumentoExpedienteTecnicoOP>)Session[STR_DOCUMENTOS_EXPEDIENTE_OP];

                        if (lstDocumentos == null || lstDocumentos.Count == 0) {
                            ModelState.AddModelError("", "Debe adjuntar, al menos, un documento.");
                        }
                        else
                        {
                            byte[] fileBytes = null;
                            String strNomArchivo = "";

                            if (lstDocumentos == null)
                            {
                                lstDocumentos = new List<DocumentoExpedienteTecnicoOP>();
                            }

                            DocumentoExpedienteTecnicoOP objDocumento = new DocumentoExpedienteTecnicoOP();

                            if (documentoUpload != null)
                            {
                                if ((documentoUpload != null) && (documentoUpload.ContentLength > 0) && !string.IsNullOrEmpty(documentoUpload.FileName))
                                {
                                    strNomArchivo = documentoUpload.FileName;
                                    string fileContentType = documentoUpload.ContentType;
                                    fileBytes = new byte[documentoUpload.ContentLength];
                                    documentoUpload.InputStream.Read(fileBytes, 0, Convert.ToInt32(documentoUpload.ContentLength));
                                }
                            }

                            ExpedienteTecnicoOP_DAL objExpedienteTecnicoOP_DAL = new ExpedienteTecnicoOP_DAL();
                            var lstTipos = objExpedienteTecnicoOP_DAL.ObtieneTiposDocumento(null);

                            objDocumento.Descripcion = pObjModel.DescripcionDocAdj;
                            objDocumento.FechaEmision = Convert.ToDateTime(pObjModel.FechaEmisionDocAdj);
                            objDocumento.NroDocumento = pObjModel.NroDocumentoAdj;
                            objDocumento.TipoDocumento = pObjModel.TipoDocmentoDocAdj;
                            objDocumento.NomTipoDocumento = lstTipos.Where(doc => doc.Id == pObjModel.TipoDocmentoDocAdj).First().Nombre;
                            objDocumento.Archivo = fileBytes;
                            objDocumento.NomArchivo = strNomArchivo;
                            objDocumento.RutaArchivo = Request.Url.GetLeftPart(UriPartial.Authority) + "/files/obras_publicas/docs_tecnicos/" + strNomArchivo;
                            lstDocumentos.Add(objDocumento);
                            Session[STR_DOCUMENTOS_EXPEDIENTE_OP] = lstDocumentos;
                        }
                    }
                }
            }
            else if (pObjModel.TipoBotonClick == "REMOVER")
            {
                List<DocumentoExpedienteTecnicoOP> lstDocumentos = (List<DocumentoExpedienteTecnicoOP>)Session[STR_DOCUMENTOS_EXPEDIENTE_OP];

                if (lstDocumentos != null)
                {
                    lstDocumentos.RemoveAt(Convert.ToInt32(pObjModel.IdDocumentoEliminar));
                }
                Session[STR_DOCUMENTOS_EXPEDIENTE_OP] = lstDocumentos;
            }
            else {

                if (ModelState.IsValid)
                {
                    try
                    {
                        List<DocumentoExpedienteTecnicoOP> lstDocumentos = (List<DocumentoExpedienteTecnicoOP>)Session[STR_DOCUMENTOS_EXPEDIENTE_OP];

                        String strRutaFiles = Server.MapPath(@"\files");
                        String strRutaObrasPublicas = Server.MapPath(@"\files") + @"\obras_publicas";
                        String strRutaDocsTecnicos = Server.MapPath(@"\files") + @"\obras_publicas\docs_tecnicos";
                        if (!System.IO.Directory.Exists(strRutaFiles))
                        {
                            System.IO.Directory.CreateDirectory(strRutaFiles);
                        }
                        if (!System.IO.Directory.Exists(strRutaObrasPublicas))
                        {
                            System.IO.Directory.CreateDirectory(strRutaObrasPublicas);
                        }
                        if (!System.IO.Directory.Exists(strRutaDocsTecnicos))
                        {
                            System.IO.Directory.CreateDirectory(strRutaDocsTecnicos);
                        }
                        foreach (var objDoc in lstDocumentos)
                        {
                            System.IO.File.WriteAllBytes(strRutaDocsTecnicos + @"\" + objDoc.NomArchivo, objDoc.Archivo);
                        }

                        ExpedienteTecnicoOP_DAL objExpedienteTecnicoOP_DAL = new ExpedienteTecnicoOP_DAL();
                        int intResultado = objExpedienteTecnicoOP_DAL.Inserta(pObjModel.IdProyecto, pObjModel.Descripcion, pObjModel.Especificaciones,
                            pObjModel.ValorReferencial, pObjModel.TipoEjecutor, pObjModel.EjecutorNom,
                            pObjModel.EjecutorApe, pObjModel.EjecutorRazonSocial, pObjModel.ContactoNom, pObjModel.ContactoApe,
                            pObjModel.ContactoEmail, pObjModel.ContactoTelefono, pObjModel.ContactoDireccion, pObjModel.SupervisorNom,
                            pObjModel.SupervisorApe, pObjModel.SupervisorTelefono, pObjModel.SupervisorEmail, lstDocumentos);

                        if (intResultado == 1)
                        {
                            //Session[STR_DOCUMENTOS_EXPEDIENTE_OP] = null;
                            ViewBag.MsgSuccess = "Se realizó la operación satisfactoriamente";
                            //return RedirectToAction("Create",);
                        }
                        else if (intResultado == -998)
                        {
                            ModelState.AddModelError("", "No puede registrar el expediente porque el proyecto ya tiene asociado uno.");
                        }
                        else if (intResultado == -997)
                        {
                            ModelState.AddModelError("", "No puede registrar el expediente debido a que el proyecto está en estado ADJUDICADO.");
                        }
                        else
                        {
                            ModelState.AddModelError("", "No se pudo insertar el expediente");
                        }
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", ex.ToString());
                    }
                }
            }

            //return Json("", JsonRequestBehavior.AllowGet);
            return View(pObjModel);
        }