Ejemplo n.º 1
0
 public Serv_ParaleloExcel(Stream data, ApplicationDbContext context, string fileName, ServProcess process, CustomUser user, int headerin = 1, int sheets = 1, string resultfileName = "Result")
     : base(cols, data, fileName, headerin, sheets, resultfileName, context)
 {
     this.process = process;
     this.user    = user;
     _context     = context;
     isFormatValid();
 }
        public IHttpActionResult CheckUpload([FromBody] JObject upload)
        {
            int branchid  = 0;
            int processid = 0;

            if (upload["FileType"] == null || upload["BranchesId"] == null || !Int32.TryParse(upload["BranchesId"].ToString(), out branchid) || upload["ProcessId"] == null)
            {
                return(BadRequest("Debes enviar Tipo de Archivo y segmentoOrigen"));
            }



            var FileType = upload["FileType"].ToString();

            ServProcess process = null;


            if (Int32.TryParse(upload["ProcessId"].ToString(), out processid))
            {
                process = _context.ServProcesses.FirstOrDefault(f => f.BranchesId == branchid &&
                                                                f.Id == processid);
            }
            else
            {
                process = _context.ServProcesses.FirstOrDefault(f => f.BranchesId == branchid &&
                                                                (f.State == ServProcess.Serv_FileState.Started) &&
                                                                f.FileType == FileType);
            }
            if (process == null)
            {
                return(Ok());
            }

            List <string> tipos = new List <string>();

            tipos.Add(FileType);

            dynamic res = new JObject();

            res.array = JToken.FromObject(tipos);
            res.id    = process.Id;
            res.state = process.State;
            return(Ok(res));
        }
        private ServProcess AddFileToProcess(int BranchesId, string FileType, int userid)
        {
            var processInDB = _context.ServProcesses.FirstOrDefault(p =>
                                                                    p.BranchesId == BranchesId && p.FileType == FileType && p.State == ServProcess.Serv_FileState.Started);

            //if exist a process of the same type, cancel and create a new one
            if (processInDB != null)
            {
                processInDB.State = ServProcess.Serv_FileState.Canceled;
            }
            //create new process
            var process = new ServProcess();

            process.Id         = process.GetNextId(_context);
            process.CreatedAt  = DateTime.Now;
            process.FileType   = FileType;
            process.State      = ServProcess.Serv_FileState.Started;
            process.CreatedBy  = userid;
            process.BranchesId = BranchesId;

            _context.ServProcesses.Add(process);
            _context.SaveChanges();
            return(process);
        }
        private void DynamicExcelToDB(string FileType, dynamic o, ServProcess file, CustomUser user, out HttpResponseMessage response)
        {
            response = new HttpResponseMessage();
            switch (FileType)
            {
            case ServProcess.Serv_FileType.Varios:
                Serv_VariosExcel ExcelFile = new Serv_VariosExcel(o.excelStream, _context, o.fileName, file, user, headerin: 1, sheets: 1);
                if (ExcelFile.ValidateFile())
                {
                    ExcelFile.toDataBase();
                    file.State = ServProcess.Serv_FileState.Started;
                    _context.SaveChanges();
                    response.StatusCode = HttpStatusCode.OK;
                    response.Content    = new StringContent("Se subio el archivo correctamente.");
                    _context.SaveChanges();
                }
                else
                {
                    file.State = ServProcess.Serv_FileState.ERROR;
                    _context.SaveChanges();
                    response = ExcelFile.toResponse();
                }
                break;

            case ServProcess.Serv_FileType.Carrera:
                Serv_CarreraExcel ExcelFile2 = new Serv_CarreraExcel(o.excelStream, _context, o.fileName, file, user, headerin: 1, sheets: 1);
                if (ExcelFile2.ValidateFile())
                {
                    ExcelFile2.toDataBase();
                    file.State = ServProcess.Serv_FileState.Started;
                    _context.SaveChanges();
                    response.StatusCode = HttpStatusCode.OK;
                    response.Content    = new StringContent("Se subio el archivo correctamente.");
                    _context.SaveChanges();
                }
                else
                {
                    file.State = ServProcess.Serv_FileState.ERROR;
                    _context.SaveChanges();
                    response = ExcelFile2.toResponse();
                }
                break;

            case ServProcess.Serv_FileType.Proyectos:
                Serv_ProyectosExcel ExcelFile3 = new Serv_ProyectosExcel(o.excelStream, _context, o.fileName, file, user, headerin: 1, sheets: 1);
                if (ExcelFile3.ValidateFile())
                {
                    ExcelFile3.toDataBase();
                    file.State = ServProcess.Serv_FileState.Started;
                    _context.SaveChanges();
                    response.StatusCode = HttpStatusCode.OK;
                    response.Content    = new StringContent("Se subio el archivo correctamente.");
                    _context.SaveChanges();
                }
                else
                {
                    file.State = ServProcess.Serv_FileState.ERROR;
                    _context.SaveChanges();
                    response = ExcelFile3.toResponse();
                }
                break;

            case ServProcess.Serv_FileType.Paralelo:
                Serv_ParaleloExcel ExcelFile4 = new Serv_ParaleloExcel(o.excelStream, _context, o.fileName, file, user, headerin: 1, sheets: 1);
                if (ExcelFile4.ValidateFile())
                {
                    ExcelFile4.toDataBase();
                    file.State = ServProcess.Serv_FileState.Started;
                    _context.SaveChanges();
                    response.StatusCode = HttpStatusCode.OK;
                    response.Content    = new StringContent("Se subio el archivo correctamente.");
                    _context.SaveChanges();
                }
                else
                {
                    file.State = ServProcess.Serv_FileState.ERROR;
                    _context.SaveChanges();
                    response = ExcelFile4.toResponse();
                }
                break;
            }
        }
        public async Task <HttpResponseMessage> UploadORExcel()
        {
            var response = new HttpResponseMessage();

            try
            {
                var req = await Request.Content.ReadAsMultipartAsync();

                dynamic o = HttpContentToVariables(req).Result;

                if (!((IDictionary <string, object>)o).ContainsKey("BranchesId") ||
                    !((IDictionary <string, object>)o).ContainsKey("FileType") ||
                    !((IDictionary <string, object>)o).ContainsKey("fileName") ||
                    !((IDictionary <string, object>)o).ContainsKey("excelStream") ||
                    !o.fileName.ToString().EndsWith(".xlsx"))
                {
                    response.StatusCode = HttpStatusCode.BadRequest;
                    response.Headers.Add("UploadErrors", "{ \"Faltan datos\": \"Debe enviar mes(mm), gestion(yyyy), segmentoOrigen(id) y un archivo excel llamado file (en formato .xlsx)\"}");
                    response.Content = new StringContent("Debe enviar mes(mm), gestion(yyyy), segmentoOrigen(id) y un archivo excel llamado file");
                    return(response);
                }


                //todo validate FileType
                // ...


                string realFileName;
                if (!verifyName(o.fileName, o.BranchesId, o.FileType, out realFileName))
                {
                    response.StatusCode = HttpStatusCode.BadRequest;
                    response.Headers.Add("UploadErrors", "{ \"Nombre Incorrecto\": \"El archivo enviado no cumple con la regla de nombres. Nombre sugerido: " + realFileName + "\"}");
                    response.Content = new StringContent("El archivo enviado no cumple con la regla de nombres.");
                    return(response);
                }

                var user = auth.getUser(Request);

                int         userid = Int32.Parse(Request.Headers.GetValues("id").First());
                ServProcess file   = AddFileToProcess(Int32.Parse(o.BranchesId.ToString()), o.FileType.ToString(), userid);

                if (file == null)
                {
                    response.StatusCode = HttpStatusCode.BadRequest;
                    response.Headers.Add("UploadErrors", "{ \"Ya se Subio archivos para este mes\": \"Ya se subio  datos para este mes, si quiere volver a subir cancele el anterior archivo.\"}");
                    response.Content = new StringContent("Ya se subió  datos para este mes, si quiere volver a subir cancele el anterior archivo.");
                    return(response);
                }

                DynamicExcelToDB(o.FileType, o, file, user, out response);
                return(response);
            }
            catch (System.ArgumentException e)
            {
                response.StatusCode = HttpStatusCode.BadRequest;
                response.Headers.Add("UploadErrors", "{ \"Formato Archivo Invalido\": \"Por favor enviar un archivo en formato excel (.xlsx)\"}");
                response.Content = new StringContent("Por favor enviar un archivo en formato excel (.xlsx)" + e);
                return(response);
            }
            catch (System.IO.IOException e)
            {
                Console.WriteLine(e);
                response.StatusCode = HttpStatusCode.BadRequest;
                response.Headers.Add("UploadErrors", "{ \"Archivo demasiado grande\": \"El archivo es demasiado grande para ser procesado.\"}");
                response.Content = new StringContent("El archivo es demasiado grande para ser procesado.");
                return(response);
            }
            catch (HanaException e)
            {
                if (e.NativeError == 258)
                {
                    Console.WriteLine(e);
                    response.StatusCode = HttpStatusCode.BadRequest;
                    response.Headers.Add("UploadErrors", "{ \"La conexion con SAP se perdio\": \"No se pudo validar el archivo con con SAP\"}");
                    response.Content = new StringContent("Error conexion SAP");
                    return(response);
                }
                Console.WriteLine(e);
                response.StatusCode = HttpStatusCode.BadRequest;
                response.Headers.Add("UploadErrors", "{ \"La conexion con SAP se perdio\": \"No se pudo validar el archivo con con SAP\"}");
                response.Content = new StringContent("Error conexion SAP");
                return(response);
            }

            /*catch (System.Exception e)
             * {
             *  Console.WriteLine(e);
             *  response.StatusCode = HttpStatusCode.BadRequest;
             *  response.Headers.Add("UploadErrors", "{ \"Existen Enlaces a otros archivos\": \"Existen celdas con referencias a otros archivos.\"}");
             *  response.Content = new StringContent("Por favor enviar un archivo en formato excel sin referencias a otros libros excel o formulas(.xls, .xslx)");
             *  return response;
             * }*/
        }