示例#1
0
 /// <summary>
 /// Comprueba que los ficheros necesarios para rellenar a la solicitud están.
 /// Asocia esos ficheros como documentos a la solicitud de que se trate.
 /// </summary>
 /// <param name="webRoot">Directorio de subida de ficheros</param>
 /// <param name="tk">Tique de autorización (caso especial "solicitud")</param>
 /// <param name="solProveedor">Solicitud de proveedor a procesar</param>
 /// <param name="ctx">Contexto para acceso a la base de datos (OpenAccess)</param>
 /// <returns></returns>
 public static string ComprobarCargarFicherosProveedor(string webRoot, string tk, SolicitudProveedor solProveedor, PortalProContext ctx)
 {
     string mens = ""; // mensaje que devoveremos, si vacío todo OK
     string[] listaFicheros; // lista de los ficheros contenidos en el directorio de carga
     // lo primero de todo que no ha habido un error en el directorio 
     if (!Directory.Exists(webRoot))
     {
         return "No existe el directorio de carga";
     }
     else
     {
         // cargamos la lista de ficheros del directorio de carga
         listaFicheros = Directory.GetFiles(webRoot);
     }
     // comprobamos si existe el parámetro que define donde esta el repositorio
     string repo = ConfigurationManager.AppSettings["PortalProRepositorio"];
     if (repo == null || repo == "")
     {
         return "No existe o está vació el parámetro de ubicación del repositorio en el Web.config";
     }
     // comprobamos que el directorio físicamente existe (si no lo creamos);
     if (!Directory.Exists(repo))
     {
         Directory.CreateDirectory(repo);
     }
     // por cada tipo de fichero asociado al grupo de proveedores al que pertenecerá este
     // comprbamos que existe el fichero correspondiente en el directorio de carga.
     foreach (TipoDocumentoGrupoProveedor tdgp in solProveedor.GrupoProveedor.TipoDocumentoGrupoProveedors)
     {
         TipoDocumento td = tdgp.TipoDocumento;
         string buscador = String.Format("{0}#{1}#", tk, td.TipoDocumentoId);
         string fichero = (from f in listaFicheros
                           where f.Contains(buscador)
                           select f).FirstOrDefault<string>();
         if (fichero == null)
         {
             return "Faltan ficheros asociados a este proveedor";
         }
         // creamos el documento correspondiente asignando un nuevo nombre que empieza por el NIF
         Documento d = new Documento();
         d.TipoDocumento = td;
         d.SolicitudProveedor = solProveedor;
         int posFich = fichero.LastIndexOf("#");
         int posExten = fichero.LastIndexOf(".");
         d.NomFichero = String.Format("{0}_{1}_{2}", solProveedor.Nif, td.TipoDocumentoId, fichero.Substring(posFich + 1));
         d.Extension = fichero.Substring(posExten + 1);
         // copiamos al repositorio
         File.Copy(fichero, Path.Combine(repo, d.NomFichero));
         ctx.Add(d);
     }
     // si llegamos aquí podemos borrar los ficheros del directorio de carga
     var rs = (from f in listaFicheros
               where f.Contains(String.Format("{0}#", tk))
               select f);
     foreach (string f in rs)
     {
         File.Delete(f);
     }
     return mens;
 }
 // este método se ejecutará de manera asíncrona.
 public string LaunchResponsable(out int threadId)
 {
     threadId = Thread.CurrentThread.ManagedThreadId;
     // abrir conexiones 
     PortalProContext ctx = new PortalProContext();
     string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
     SqlConnection con = new SqlConnection(strConnect);
     con.Open();
     string sql = "SELECT COUNT(*) FROM [PortalProTest].[dbo].[Cau_PortalPro_VResponsable]";
     SqlCommand cmd = new SqlCommand(sql, con);
     int totreg = (int)cmd.ExecuteScalar();
     int numreg = 0;
     sql = @"SELECT  
                 [ID]
                 ,[NAME]
                 ,[EMAIL]
             FROM [PortalProTest].[dbo].[Cau_PortalPro_VResponsable]";
     cmd = new SqlCommand(sql, con);
     SqlDataReader dr = cmd.ExecuteReader();
     while (dr.Read())
     {
         numreg++;
         string codax = dr.GetString(0);
         // Buscamos si esa empresa existe
         Responsable res2 = (from e2 in ctx.Responsables
                         where e2.CodAx == codax
                         select e2).FirstOrDefault<Responsable>();
         if (res2 == null)
         {
             res2 = new Responsable();
             ctx.Add(res2);
         }
         res2.CodAx = codax;
         res2.Nombre = dr.GetString(1);
         res2.Email = dr.GetString(2);
         ctx.SaveChanges();
         // Actualizar los registros de proceso
         Progresos progreso = (from p in ctx.Progresos
                               where p.ProgresoId == 5
                               select p).FirstOrDefault<Progresos>();
         if (progreso != null)
         {
             progreso.NumReg = numreg;
             progreso.TotReg = totreg;
             ctx.SaveChanges();
         }
     }
     dr.Close();
     ctx.Dispose();
     con.Close();
     con.Dispose();
     return "";
 }
示例#3
0
 /// <summary>
 /// Tras comprobar que un usuario con el login y password dados 
 /// existe, crea un tique que devuelve en el cuerpo del mensaje
 /// </summary>
 /// <param name="login">Login del usuario</param>
 /// <param name="password">Contraseña del usuario</param>
 /// <returns>Un objeto que representa un tique</returns>
 /// <remarks>Este es un comentario adicional</remarks>
 public virtual WebApiTicket GetLogin(string login, string password)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         WebApiTicket tk = CntWebApiSeguridad.Login(login, password, 30, ctx);
         if (tk == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Nombre de usuario o contraseña incorrecto"));
         }
         else
         {
             // agregamos el tique recién creado
             ctx.Add(tk);
             ctx.SaveChanges();
             tk = ctx.CreateDetachedCopy<WebApiTicket>(tk, x => x.Usuario);
             return tk;
         }
     }
 }
 /// <summary>
 /// Genera una factura de una sola linea con el importe
 /// pasado y a partir del pedido indicado.
 /// </summary>
 /// <param name="pedido">Pedido para el que se genera la factura</param>
 /// <param name="importe">Importe a facturar</param>
 /// <param name="ctx">Contexto OpenAccess</param>
 /// <returns></returns>
 public static CabFactura PedidoSuscripcionGenerarFactura(Pedido pedido, decimal importe, PortalProContext ctx)
 {
     CabFactura factura = null;
     // evitamos que se cuele un importe a 0
     if (importe == 0) return factura;
     // el pedido debe tener lineas
     if (pedido.LinPedidos.Count < 1) return factura;
     // creamos la factura.
     factura = new CabFactura();
     factura.FechaAlta = DateTime.Now;
     factura.TotalFactura = importe;
     factura.Estado = "RECIBIDA";
     factura.Generada = true;
     factura.Proveedor = pedido.Proveedor;
     factura.Empresa = pedido.Empresa;
     factura.Responsable = pedido.Responsable;
     ctx.Add(factura);
     ctx.SaveChanges();
     // creamos una línea única con el importe
     LinFactura lfactura = new LinFactura();
     lfactura.CabFactura = factura;
     lfactura.NumeroPedido = pedido.NumPedido;
     lfactura.Importe = importe;
     // usamos la primera línea que obtengamos del pedido
     // como modelo
     LinPedido lpedido = pedido.LinPedidos[0];
     lfactura.Descripcion = lpedido.Descripcion;
     lfactura.PorcentajeIva = lpedido.PorcentajeIva;
     lfactura.NumeroPedido = lpedido.NumPedido;
     lfactura.NumLineaPedido = lpedido.NumLinea;
     lpedido.Facturado += importe;
     if (factura.FechaEmision != null)
         lfactura.FechaEmision = (DateTime)factura.FechaEmision;
     ctx.Add(lfactura);
     ctx.SaveChanges();
     return factura;
 }
示例#5
0
 // este método se ejecutará de manera asíncrona.
 public string LaunchPedido(out int threadId)
 {
     threadId = Thread.CurrentThread.ManagedThreadId;
     // abrir conexiones 
     PortalProContext ctx = new PortalProContext();
     // Actualizar los registros de proceso
     Progresos progreso = (from p in ctx.Progresos
                           where p.ProgresoId == 3
                           select p).FirstOrDefault<Progresos>();
     if (progreso != null)
     {
         progreso.NumReg = 0;
         progreso.TotReg = 1;
         ctx.SaveChanges();
     }
     string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
     SqlConnection con = new SqlConnection(strConnect);
     con.Open();
     string sql = "SELECT COUNT(*) FROM [dbo].[Cau_PortalPro_VCabPedido]";
     SqlCommand cmd = new SqlCommand(sql, con);
     int totreg = (int)cmd.ExecuteScalar();
     int numreg = 0;
     sql = @"SELECT  
                 [PURCHID]
                 ,[INVOICEACCOUNT]
                 ,[DATAAREAID]
                 ,[ESTADO]
                 ,[TIPO]
                 ,[CODCONTACTO]
                 ,[CONTACTO]
                 ,[CREATEDDATE]
                 ,[FECHARECEPCION]
                 ,[FECHALIMITE]
             FROM [dbo].[Cau_PortalPro_VCabPedido]";
     cmd = new SqlCommand(sql, con);
     SqlDataReader dr = cmd.ExecuteReader();
     while (dr.Read())
     {
         numreg++;
         string numpedido = dr.GetString(0);
         // Buscamos si esa empresa existe
         Pedido ped2 = (from p2 in ctx.Pedidos
                         where p2.NumPedido == numpedido
                         select p2).FirstOrDefault<Pedido>();
         if (ped2 == null)
         {
             ped2 = new Pedido();
             ctx.Add(ped2);
         }
         ped2.NumPedido = numpedido;
         ped2.Proveedor = (from pr in ctx.Proveedors
                           where pr.CodAx == dr.GetString(1)
                           select pr).FirstOrDefault<Proveedor>();
         ped2.Empresa = (from e in ctx.Empresas
                             where e.CodAx == dr.GetString(2)
                             select e).FirstOrDefault<Empresa>();
         ped2.Actualizado = DateTime.Now;
         if (!dr.IsDBNull(3))
         {
             switch (dr.GetString(3))
             {
                 case "Facturado":
                     ped2.Estado = "FACTURADO";
                     break;
                 case "Pedido Abierto":
                     ped2.Estado = "ABIERTO";
                     break;
                 case "Recibido":
                     ped2.Estado = "RECIBIDO";
                     break;
                 case "Cancelado":
                     ped2.Estado = "CANCELADO";
                     break;
             }
         }
         if (!dr.IsDBNull(4))
         {
             switch (dr.GetString(4))
             {
                 case "Pedido de Compra":
                     ped2.TipoPedido = "COMPRA";
                     break;
                 case "Suscripción":
                     ped2.TipoPedido = "SUSCRIPCION";
                     break;
                 case "Solicitud de Compra":
                     ped2.TipoPedido = "SOLICITUD";
                     break;
             }
         }
         ped2.Responsable = (from r in ctx.Responsables
                             where r.CodAx == dr.GetString(5)
                             select r).FirstOrDefault<Responsable>();
         ped2.FechaAlta = dr.GetDateTime(7);
         if (!dr.IsDBNull(8)) ped2.FechaRecepcion = dr.GetDateTime(8);
         if (!dr.IsDBNull(9)) 
         { 
             ped2.FechaLimite = dr.GetDateTime(9);
             // hay que controlar le fecha nula AX (01/01/1900)
             if (String.Format("{0:dd/MM/yyyy}", ped2.FechaLimite) == "01/01/1900")
             {
                 ped2.FechaLimite = null;
             }
         }
         //try
         //{
             ctx.SaveChanges();
         //}
         //catch (Exception ex)
         //{
         //}
         // cargar las lineas
         LoadAssociateLines(numpedido);
         // Actualizar los registros de proceso
         progreso = (from p in ctx.Progresos
                               where p.ProgresoId == 3
                               select p).FirstOrDefault<Progresos>();
         if (progreso != null)
         {
             progreso.NumReg = numreg;
             progreso.TotReg = totreg;
             ctx.SaveChanges();
         }
     }
     dr.Close();
     ctx.Dispose();
     con.Close();
     con.Dispose();
     return "";
 }
示例#6
0
 // este método se ejecutará de manera asíncrona.
 public string LaunchFactura(out int threadId)
 {
     threadId = Thread.CurrentThread.ManagedThreadId;
     // abrir conexiones 
     PortalProContext ctx = new PortalProContext();
     string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
     SqlConnection con = new SqlConnection(strConnect);
     con.Open();
     string sql = "SELECT COUNT(*) FROM [PortalProTest].[dbo].[Cau_PortalPro_VCabFactura]";
     SqlCommand cmd = new SqlCommand(sql, con);
     int totreg = (int)cmd.ExecuteScalar();
     int numreg = 0;
     sql = @"SELECT  
                 [ACCOUNTNUM]
                 ,[IDEMPRESA]
                 ,[INVOICEID]
                 ,[INVOICEDATE]
                 ,[INVOICEAMOUNT]
                 ,[FECHAPAGO]
                 ,[ESTADI]
                 ,[FECHAVENCIMIENTO]
             FROM [PortalProTest].[dbo].[Cau_PortalPro_VCabFactura]";
     cmd = new SqlCommand(sql, con);
     SqlDataReader dr = cmd.ExecuteReader();
     while (dr.Read())
     {
         numreg++;
         string codAxProveedor = dr.GetString(0);
         string numFactura = dr.GetString(2);
         DateTime fechaFactura = dr.GetDateTime(3);
         Proveedor proveedor = (from pr in ctx.Proveedors
                                where pr.CodAx == codAxProveedor
                                select pr).FirstOrDefault<Proveedor>();
         // Buscamos si la fcatura ya existe
         CabFactura fac = (from f in ctx.CabFacturas
                           where f.NumFactura == numFactura &&
                                 f.FechaEmision == fechaFactura
                           select f).FirstOrDefault<CabFactura>();
         if (fac == null)
         {
             fac = new CabFactura();
             fac.FechaAlta = DateTime.Now;
             ctx.Add(fac);
         }
         fac.Proveedor = proveedor;
         fac.NumFactura = numFactura;
         fac.FechaEmision = fechaFactura;
         fac.Empresa = (from e in ctx.Empresas
                        where e.CodAx == dr.GetString(1)
                        select e).FirstOrDefault<Empresa>();
         string estado = dr.GetString(6);
         switch (estado)
         {
             case "Pagado":
                 fac.Estado = "PAGADA";
                 break;
             case "Recibido":
                 fac.Estado = "PROCESADA";
                 break;
         }
         fac.TotalFactura = dr.GetDecimal(4);
         if (!dr.IsDBNull(5))
             fac.FechaCobro = dr.GetDateTime(5);
         if (!dr.IsDBNull(7))
             fac.FechaPrevistaCobro = dr.GetDateTime(7);
         try
         {
             ctx.SaveChanges();
         }
         catch (Exception ex)
         {
         }
         // cargar las lineas
         try
         {
             LoadAssociateLines(numFactura, fechaFactura);
         }
         catch (Exception ex)
         {
         }
         // Actualizar los registros de proceso
         Progresos progreso = (from p in ctx.Progresos
                               where p.ProgresoId == 4
                               select p).FirstOrDefault<Progresos>();
         if (progreso != null)
         {
             progreso.NumReg = numreg;
             progreso.TotReg = totreg;
             ctx.SaveChanges();
         }
     }
     dr.Close();
     ctx.Dispose();
     con.Close();
     con.Dispose();
     return "";
 }
 public virtual bool Put(int idPro, IEnumerable<Documento> documentos, string userId, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (LinFactura)"));
         }
         // comprobamos que los documentos no son nulos
         if (documentos == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // primero buscamos si un proveedor con ese id existe
         Proveedor pro = (from p in ctx.Proveedors
                          where p.ProveedorId == idPro
                          select p).FirstOrDefault<Proveedor>();
         if (pro == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un proveedor con el id proporcionado (Proveedores)"));
         }
         // primero eliminamos los posibles documentos anteriores
         foreach (Documento d in pro.Documentos)
         {
             PortalProWebUtility.EliminarDocumento(d, ctx);
         }
         // La aplicación ahora depende del comienzo del usuario
         string application = "PortalPro";
         switch (userId.Substring(0, 1))
         {
             case "U":
                 application = "PortalPro2";
                 break;
             case "G":
                 application = "PortalPro";
                 break;
         }
         // Ahora cargamos las lineas nuevas
         foreach (Documento doc in documentos)
         {
             if (doc.TipoDocumento != null)
             {
                 TipoDocumento tp = (from t in ctx.TipoDocumentos
                                     where t.TipoDocumentoId == doc.TipoDocumento.TipoDocumentoId
                                     select t).FirstOrDefault<TipoDocumento>();
                 if (tp != null)
                 {
                     string fieldId = String.Format("PDFT{0}", doc.TipoDocumento.TipoDocumentoId);
                     string fpdf = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Proveedor", fieldId);
                     if (fpdf != "")
                     {
                         Documento vDoc = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fpdf, ctx);
                         vDoc.TipoDocumento = tp;
                         vDoc.Proveedor = pro;
                         ctx.Add(vDoc);
                         ctx.SaveChanges();
                     }
                 }
             }
         }
     }
     return true;
 }
 /// <summary>
 /// Crear un nuevo usuario de proveedor
 /// </summary>
 /// <param name="Usuario">Objeto a crear, el atributo UsuarioPorveedorId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorización (se debe obtener con la accion Login)</param>
 /// <returns></returns>
 public virtual UsuarioProveedor Post(UsuarioProveedor usuarioProveedor, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (UsuarioProveedor)"));
         }
         // comprobar las precondiciones
         if (usuarioProveedor == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // controlar la contraseña.
         if (usuarioProveedor.Password != null && usuarioProveedor.Password != "")
         {
             // se guarda la contraseña encriptada
             usuarioProveedor.Password = CntWebApiSeguridad.GetHashCode(usuarioProveedor.Password);
         }
         int proveedorId = 0;
         // Controlamos las propiedades que son en realidad objetos.
         if (usuarioProveedor.Proveedor != null)
         {
             proveedorId = usuarioProveedor.Proveedor.ProveedorId;
             usuarioProveedor.Proveedor = null;
         }
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(usuarioProveedor);
         if (proveedorId != 0)
         {
             usuarioProveedor.Proveedor = (from p in ctx.Proveedors
                                     where p.ProveedorId == proveedorId
                                     select p).FirstOrDefault<Proveedor>();
         }
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<UsuarioProveedor>(usuarioProveedor, x => x.Proveedor);
     }
 }
 /// <summary>
 /// Cambia el estado de una solicitud y realiza la grabación 
 /// correspondiente en el log
 /// </summary>
 /// <param name="id">Identificador de la solicitud a procesar</param>
 /// <param name="tk">Tique de autorización (ver Login)</param>
 /// <param name="status">Código del estado al que se quiere pasar (2=Aceptada / 3=Rechazada)</param>
 /// <param name="userId">Identificador del usuario que avala el cambio</param>
 /// <param name="comentarios">Comentarios adicionales</param>
 /// <returns></returns>
 public virtual bool PutStatus(int id, string tk, int status, int userId, string comentarios)
 {
     bool res = false;
     using (PortalProContext ctx = new PortalProContext())
     {
         // Comprobamos la solicitud
         SolicitudProveedor solProveedor = (from sp in ctx.SolicitudProveedors
                                            where sp.SolicitudProveedorId == id
                                            select sp).FirstOrDefault<SolicitudProveedor>();
         if (solProveedor == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una solicitud con el id proporcionado (Solicitudes proveedores)"));
         }
         if (solProveedor.SolicitudStatus == null || solProveedor.SolicitudStatus.SolicitudStatusId != 1)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "La solicitud ya ha sido procesada"));
         }
         // ya nos hemos asegurado que la soilictud existe ahora creamos el registro de procesamiento.
         SolicitudStatus st = (from s in ctx.SolicitudStatus
                               where s.SolicitudStatusId == status
                               select s).FirstOrDefault<SolicitudStatus>();
         if (st == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una estatus con el id proporcionado (Solicitudes proveedores)"));
         }
         // obtención de los usuarios
         Usuario usu = (from u in ctx.Usuarios
                        where u.UsuarioId == userId
                        select u).FirstOrDefault<Usuario>();
         if (usu == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "El usuario es incorrecto (Solicitudes proveedores)"));
         }
         // y ahora el regsitro de procesamiento
         SolicitudLog slg = new SolicitudLog();
         slg.Sello = DateTime.Now;
         slg.Comentarios = comentarios;
         slg.SolicitudProveedor = solProveedor;
         slg.Usuario = usu;
         slg.SolicitudStatusInicial = solProveedor.SolicitudStatus;
         slg.SolicitudStatusFinal = st;
         ctx.Add(slg);
         // cambiamos el estado de la solicitud
         solProveedor.SolicitudStatus = st;
         // y salvamos todo
         ctx.SaveChanges();
         // una vez hecho esto hay que informar por correo
         // preparamos y enviamos el correo de confirmación por defecto (por si falla la plantilla).
         string asunto = "[PortalPro] Recibida solicitud";
         string cuerpo = String.Format("Su solicitud con ID:{0} ha sido recibida. No responda este mensaje", solProveedor.SolicitudProveedorId);
         // El primer paso es obtener la plantilla en este caso su código coincide con el estatus
         Plantilla plantilla = (from pl in ctx.Plantillas
                                where pl.PlantillaId == status
                                select pl).FirstOrDefault<Plantilla>();
         if (plantilla != null)
         {
             asunto = String.Format(plantilla.Asunto, solProveedor.SolicitudProveedorId, solProveedor.RazonSocial, solProveedor.Direccion, solProveedor.Localidad,
                 solProveedor.CodPostal, solProveedor.Provincia, solProveedor.Comunidad, solProveedor.Pais, solProveedor.Telefono, solProveedor.Fax,
                 solProveedor.Movil, solProveedor.Email, solProveedor.Url, solProveedor.Nif, comentarios);
             cuerpo = String.Format(plantilla.Cuerpo, solProveedor.SolicitudProveedorId, solProveedor.RazonSocial, solProveedor.Direccion, solProveedor.Localidad,
                 solProveedor.CodPostal, solProveedor.Provincia, solProveedor.Comunidad, solProveedor.Pais, solProveedor.Telefono, solProveedor.Fax,
                 solProveedor.Movil, solProveedor.Email, solProveedor.Url, solProveedor.Nif, comentarios);
         }
         PortalProMailController.SendEmail(solProveedor.Email, asunto, cuerpo);
     }
     return res;
 }
        // este método se ejecutará de manera asíncrona.
        public string LaunchActividadPrincipal(out int threadId)
        {
            threadId = Thread.CurrentThread.ManagedThreadId;
            // abrir conexiones 
            PortalProContext ctx = new PortalProContext();
            // Actualizar los registros de proceso para dejar bloqueada la barra
            Progresos progreso = (from p in ctx.Progresos
                                  where p.ProgresoId == 6
                                  select p).FirstOrDefault<Progresos>();
            if (progreso != null)
            {
                progreso.NumReg = 0;
                progreso.TotReg = 1;
                ctx.SaveChanges();
            }

            string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
            SqlConnection con = new SqlConnection(strConnect);
            con.Open();
            string sql = "SELECT COUNT(*) FROM [dbo].[Cau_PortalProv_LineOfBusiness]";
            SqlCommand cmd = new SqlCommand(sql, con);
            int totreg = (int)cmd.ExecuteScalar();
            int numreg = 0;
            sql = @"SELECT  
                        [LINEOFBUSINESSID]
                        ,[DESCRIPTION]
                    FROM [dbo].[Cau_PortalProv_LineOfBusiness]";
            cmd = new SqlCommand(sql, con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                numreg++;
                string codax = dr.GetString(0);
                // Buscamos si esa ActividadPrincipal existe
                ActividadPrincipal emp2 = (from e2 in ctx.ActividadPrincipals
                                where e2.CodAx == codax
                                select e2).FirstOrDefault<ActividadPrincipal>();
                if (emp2 == null)
                {
                    emp2 = new ActividadPrincipal();
                    ctx.Add(emp2);
                }
                emp2.CodAx = codax;
                emp2.Nombre = dr.GetString(1);
                ctx.SaveChanges();
                // Actualizar los registros de proceso
                progreso = (from p in ctx.Progresos
                                      where p.ProgresoId == 6
                                      select p).FirstOrDefault<Progresos>();
                if (progreso != null)
                {
                    progreso.NumReg = numreg;
                    progreso.TotReg = totreg;
                    ctx.SaveChanges();
                }
            }
            dr.Close();
            ctx.Dispose();
            con.Close();
            con.Dispose();
            return "";
        }
示例#11
0
 public static Documento CrearDocumentoDesdeArchivoCargado(string application, string fichero, PortalProContext ctx)
 {
     Documento d = null;
     // siempre creamos un nuevo documento
     string portalProRepo = ConfigurationManager.AppSettings["PortalProRepository"];
     string uploadRepo = ConfigurationManager.AppSettings["UploadRepository"];
     switch (application)
     {
         case "PortalPro":
             uploadRepo = ConfigurationManager.AppSettings["UploadRepository"];
             break;
         case "PortalPro2":
             uploadRepo = ConfigurationManager.AppSettings["UploadRepository2"];
             break;
     }
     d = new Documento();
     int pos = fichero.LastIndexOf(".");
     if (pos > -1)
         d.Extension = fichero.Substring(pos + 1);
     pos = fichero.LastIndexOf("-");
     if (pos > 0)
         d.NomFichero = fichero.Substring(pos + 1);
     ctx.Add(d);
     ctx.SaveChanges();
     string nFichero = String.Format("{0:000000}-{1}", d.DocumentoId, d.NomFichero);
     string origen = Path.Combine(uploadRepo, fichero);
     string destino = Path.Combine(portalProRepo, nFichero);
     File.Move(origen, destino);
     ctx.SaveChanges();
     return d;
 }
示例#12
0
 /// <summary>
 /// Crear un nuevo Responsables
 /// </summary>
 /// <param name="responsable">Objeto a crear, el atributo ResponsableId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param>
 /// <returns></returns>
 public virtual Responsable Post(Responsable responsable, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk,ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Responsables)"));
         }
         // comprobar las precondiciones
         if (responsable == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         int usuarioId = 0;
         if (responsable.Usuario != null)
         {
             usuarioId = responsable.Usuario.UsuarioId;
             responsable.Usuario = null;
         }
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(responsable);
         if (usuarioId != 0)
         {
             responsable.Usuario = (from u in ctx.Usuarios
                                    where u.UsuarioId == usuarioId
                                    select u).FirstOrDefault<Usuario>();
         }
         ctx.SaveChanges();
         return responsable;
     }
 }
示例#13
0
        public virtual Pedido Post(Pedido pedido, string userId, string tk)
        {
            using (PortalProContext ctx = new PortalProContext())
            {
                // comprobar el tique
                if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Pedido)"));
                }
                // comprobar las precondiciones
                if (pedido == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
                }
                // La aplicación ahora depende del comienzo del usuario
                string application = "PortalPro";
                switch (userId.Substring(0, 1))
                {
                    case "U":
                        application = "PortalPro2";
                        break;
                    case "G":
                        application = "PortalPro";
                        break;
                }
                // comprobamos si existen los ficheros que necesitamos
                string fPdf = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Pedido", "PDF");
                if (fPdf == "")
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Se necesita un fichero PDF asociado a la pedido (Pedido)"));
                }
                // Controlamos las propiedades que son en realidad objetos.
                int proveedorId = 0;
                if (pedido.Proveedor != null)
                {
                    proveedorId = pedido.Proveedor.ProveedorId;
                    pedido.Proveedor = null;
                }
                int responsableId = 0;
                if (pedido.Responsable != null)
                {
                    responsableId = pedido.Responsable.ResponsableId;
                    pedido.Responsable = null;
                }
                int empresaId = 0;
                if (pedido.Empresa != null)
                {
                    empresaId = pedido.Empresa.EmpresaId;
                    pedido.Empresa = null;
                }
                int documentoXmlId = 0;
                if (pedido.DocumentoXml != null)
                {
                    documentoXmlId = pedido.DocumentoXml.DocumentoId;
                    pedido.DocumentoXml = null;
                }

                int documentoPdfId = 0;
                if (pedido.DocumentoPdf != null)
                {
                    documentoPdfId = pedido.DocumentoPdf.DocumentoId;
                    pedido.DocumentoPdf = null;
                }
                // dar de alta el objeto en la base de datos y devolverlo en el mensaje
                ctx.Add(pedido);
                if (proveedorId != 0)
                {
                    pedido.Proveedor = (from p in ctx.Proveedors
                                        where p.ProveedorId == proveedorId
                                        select p).FirstOrDefault<Proveedor>();
                }
                if (empresaId != 0)
                {
                    pedido.Empresa = (from p in ctx.Empresas
                                      where p.EmpresaId == empresaId
                                      select p).FirstOrDefault<Empresa>();
                }
                if (responsableId != 0)
                {
                    pedido.Responsable = (from p in ctx.Responsables
                                          where p.ResponsableId == responsableId
                                          select p).FirstOrDefault<Responsable>();
                }
                if (documentoXmlId != 0)
                {
                    pedido.DocumentoXml = (from d in ctx.Documentos
                                           where d.DocumentoId == documentoPdfId
                                           select d).FirstOrDefault<Documento>();
                }
                if (documentoPdfId != 0)
                {
                    pedido.DocumentoPdf = (from d in ctx.Documentos
                                           where d.DocumentoId == documentoPdfId
                                           select d).FirstOrDefault<Documento>();
                }
                if (fPdf != "")
                {
                    pedido.DocumentoPdf = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fPdf, ctx);
                }
                pedido.FechaAlta = DateTime.Now;
                ctx.SaveChanges();
                return ctx.CreateDetachedCopy<Pedido>(pedido, x => x.Proveedor, x => x.DocumentoPdf, x => x.Empresa);
            }
        }
示例#14
0
        /// <summary>
        /// Crear un nueva cabecera de pedido
        /// </summary>
        /// <param name="Pedido">Objeto a crear, el atributo PedidoId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
        /// <param name="tk"> Tique de autorización (se debe obtener con la accion Login)</param>
        /// <returns></returns>
        public virtual Pedido Post(Pedido pedido, string tk)
        {
            using (PortalProContext ctx = new PortalProContext())
            {
                // comprobar el tique
                if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Pedido)"));
                }
                // comprobar las precondiciones
                if (pedido == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
                }
                // Controlamos las propiedades que son en realidad objetos.
                int proveedorId = 0;
                if (pedido.Proveedor != null)
                {
                    proveedorId = pedido.Proveedor.ProveedorId;
                    pedido.Proveedor = null;
                }
                int responsableId = 0;
                if (pedido.Responsable != null)
                {
                    responsableId = pedido.Responsable.ResponsableId;
                    pedido.Responsable = null;
                }
                int empresaId = 0;
                if (pedido.Empresa != null)
                {
                    empresaId = pedido.Empresa.EmpresaId;
                    pedido.Empresa = null;
                }
                int documentoXmlId = 0;
                if (pedido.DocumentoXml != null)
                {
                    documentoXmlId = pedido.DocumentoXml.DocumentoId;
                    pedido.DocumentoXml = null;
                }
                int documentoPdfId = 0;
                if (pedido.DocumentoPdf != null)
                {
                    documentoPdfId = pedido.DocumentoPdf.DocumentoId;
                    pedido.DocumentoPdf = null;
                }
                // dar de alta el objeto en la base de datos y devolverlo en el mensaje
                ctx.Add(pedido);
                if (proveedorId != 0)
                {
                    pedido.Proveedor = (from p in ctx.Proveedors
                                        where p.ProveedorId == proveedorId
                                        select p).FirstOrDefault<Proveedor>();
                }
                if (empresaId != 0)
                {
                    pedido.Empresa = (from p in ctx.Empresas
                                      where p.EmpresaId == empresaId
                                      select p).FirstOrDefault<Empresa>();
                }
                if (responsableId != 0)
                {
                    pedido.Responsable = (from p in ctx.Responsables
                                          where p.ResponsableId == responsableId
                                          select p).FirstOrDefault<Responsable>();
                }
                if (documentoXmlId != 0)
                {
                    pedido.DocumentoXml = (from d in ctx.Documentos
                                           where d.DocumentoId == documentoPdfId
                                           select d).FirstOrDefault<Documento>();
                }

                if (documentoPdfId != 0)
                {
                    pedido.DocumentoPdf = (from d in ctx.Documentos
                                           where d.DocumentoId == documentoPdfId
                                           select d).FirstOrDefault<Documento>();
                }
                pedido.FechaAlta = DateTime.Now;
                ctx.SaveChanges();
                return ctx.CreateDetachedCopy<Pedido>(pedido, x => x.Proveedor, x => x.DocumentoPdf, x => x.Empresa);
            }
        }
 public static string ComprobarLineaFacturaContraPedidoSuscripcion(CabFactura factura, LinFactura l, PortalProContext ctx)
 {
     string m = "";
     // (1) comprobar que el pedido existe
     Pedido p = (from ped in ctx.Pedidos
                 where ped.NumPedido == l.NumeroPedido
                 select ped).FirstOrDefault<Pedido>();
     if (p == null)
     {
         m = String.Format("El pedido {0} no existe.", l.NumeroPedido);
         return m;
     }
     // ahora se compara contra línea, luego hay que buscar la línea correspondiente
     LinPedido lp = (from linped in ctx.LinPedidos
                     where linped.NumPedido == l.NumeroPedido
                     && linped.NumLinea == l.NumLineaPedido
                     select linped).FirstOrDefault<LinPedido>();
     if (lp == null)
     {
         m = String.Format("El linea {0} del pedido {1} no existe.", l.NumLineaPedido, l.NumeroPedido);
         return m;
     }
     // Obtener parámetros y datos de proveedor para verificar márgenes
     Parametro parametro = (from par in ctx.Parametros1
                            where par.ParametroId == 1
                            select par).FirstOrDefault<Parametro>();
     Proveedor proveedor = p.Proveedor;
     // comprobamos las reglas para pedido de suscripcion
     decimal importeAFacturar = PedidoSuscripcionImporteFacturable(p, factura, ctx);
     if (importeAFacturar == 0)
     {
         m = String.Format("NO se puede facturar con esta fecha e importe contra el pedido de suscripción {0}", p.NumPedido);
         return m;
     }
     l.NumeroPedido = p.NumPedido;
     l.NumLineaPedido = lp.NumLinea;
     l.Importe = importeAFacturar;
     l.Descripcion = lp.Descripcion;
     l.PorcentajeIva = lp.PorcentajeIva;
     // actualizar empresa y responsables
     factura.Empresa = p.Empresa;
     factura.Responsable = p.Responsable;
     factura.TotalFactura += l.Importe;
     l.CabFactura = factura;
     // antes de salir conmprobamos si el total facturado supera
     // el margen de control PDF
     if (factura.TotalFactura > parametro.MaxImportePdf)
     {
         factura.Estado = "RECIBIDA2";
         factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} pasa a estado INCIDENCIA debido a que su total {2} supera al margen de control PDF {4} <br/>",
             DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado, parametro.MaxImportePdf);
     }
     ctx.Add(l);
     ctx.SaveChanges();
     return m;
 }
示例#16
0
 public virtual CabFactura Post(CabFactura factura, string userId, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (CabFactura)"));
         }
         // comprobar las precondiciones
         if (factura == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // comprobamos que no hay una factura para el mismo proveedor en ese año y con
         // el mismo número de factura
         CabFactura f = PortalProWebUtility.YaExisteUnaFacturaComoEsta(factura, ctx);
         if (f != null)
         {
             string m = String.Format("Ya hay una factura del proveedor para este año {0:yyyy} con el mismo número {1}", f.FechaEmision, f.NumFactura);
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, m));
         }
         // La aplicación ahora depende del comienzo del usuario
         string application = "PortalPro";
         switch (userId.Substring(0, 1))
         {
             case "U":
                 application = "PortalPro2";
                 break;
             case "G":
                 application = "PortalPro";
                 break;
         }
         // comprobamos si existen los ficheros que necesitamos
         string fPdf = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Factura", "PDF");
         if (fPdf == "")
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Se necesita un fichero PDF asociado a la factura (CabFactura)"));
         }
         // el archivo Xml no es obligatorio, pero si lo han subido cargamos el fichero
         string fXml = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Factura", "XML");
         // Controlamos las propiedades que son en realidad objetos.
         int proveedorId = 0;
         if (factura.Proveedor != null)
         {
             proveedorId = factura.Proveedor.ProveedorId;
             factura.Proveedor = null;
         }
         int documentoPdfId = 0;
         if (factura.DocumentoPdf != null)
         {
             documentoPdfId = factura.DocumentoPdf.DocumentoId;
             factura.DocumentoPdf = null;
         }
         int documentoXmlId = 0;
         if (factura.DocumentoXml != null)
         {
             documentoXmlId = factura.DocumentoXml.DocumentoId;
             factura.DocumentoXml = null;
         }
         int empresaId = 0;
         if (factura.Empresa != null)
         {
             empresaId = factura.Empresa.EmpresaId;
             factura.Empresa = null;
         }
         int responsableId = 0;
         if (factura.Responsable != null)
         {
             responsableId = factura.Responsable.ResponsableId;
             factura.Responsable = null;
         }
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         factura.Estado = "ACEPTADA";
         ctx.Add(factura);
         if (proveedorId != 0)
         {
             factura.Proveedor = (from p in ctx.Proveedors
                                  where p.ProveedorId == proveedorId
                                  select p).FirstOrDefault<Proveedor>();
         }
         if (documentoPdfId != 0)
         {
             factura.DocumentoPdf = (from d in ctx.Documentos
                                     where d.DocumentoId == documentoPdfId
                                     select d).FirstOrDefault<Documento>();
         }
         if (documentoXmlId != 0)
         {
             factura.DocumentoXml = (from d in ctx.Documentos
                                     where d.DocumentoId == documentoXmlId
                                     select d).FirstOrDefault<Documento>();
         }
         if (fPdf != "")
         {
             factura.DocumentoPdf = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fPdf, ctx);
         }
         if (fXml != "")
         {
             factura.DocumentoXml = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fXml, ctx);
         }
         if (empresaId != 0)
         {
             factura.Empresa = (from e in ctx.Empresas
                                where e.EmpresaId == empresaId
                                select e).FirstOrDefault<Empresa>();
         }
         if (responsableId != 0)
         {
             factura.Responsable = (from r in ctx.Responsables
                                    where r.ResponsableId == responsableId
                                    select r).FirstOrDefault<Responsable>();
         }
         factura.FechaAlta = DateTime.Now;
         factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido creada con estado {3} <br/>",
             DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado);
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml);
     }
 }
示例#17
0
        public static CabFactura GenerarFacturaDesdePedido(Pedido p, PortalProContext ctx)
        {
            CabFactura f = new CabFactura()
            {
                CabFacturaId = 0,
                Proveedor = p.Proveedor,
                FechaAlta = DateTime.Now,
                Empresa = p.Empresa,
                Responsable = p.Responsable,
                Estado = "INCIDENCIA"
            };
            ctx.Add(f);
            ctx.SaveChanges();
            decimal totalF = 0;
            if (p.TotalFacturado == 0)
            {
                // caso (1) es el más sencillo, una factura con tantas líneas como tenga el pedido
                foreach (LinPedido lp in p.LinPedidos)
                {
                    ctx.Add(new LinFactura()
                    {
                        LinFacturaId = 0,
                        NumeroPedido = p.NumPedido,
                        Importe = lp.Importe,
                        Descripcion = lp.Descripcion,
                        PorcentajeIva = 0,
                        CabFactura = f
                    });
                    f.TotalFactura += lp.Importe;
                    p.TotalFacturado += lp.Importe;
                    ctx.SaveChanges();
                }
            }
            else
            {
                // caso (2) generaremos una única linea con el resto del pedido
                ctx.Add(new LinFactura()
                {
                    LinFacturaId = 0,
                    NumeroPedido = p.NumPedido,
                    Importe = p.TotalPedido - p.TotalFacturado,
                    Descripcion = "Resto de pedido",
                    PorcentajeIva = 0,
                    CabFactura = f
                });
                f.TotalFactura = p.TotalPedido - p.TotalFacturado;
                p.TotalFacturado = p.TotalPedido;
                ctx.SaveChanges();
            }

            return f;
        }
示例#18
0
 public static string ComprobarLineaFacturaContraPedido(CabFactura factura, LinFactura l, PortalProContext ctx)
 {
     string m = "";
     // (1) comprobar que el pedido existe
     Pedido p = (from ped in ctx.Pedidos
                 where ped.NumPedido == l.NumeroPedido
                 select ped).FirstOrDefault<Pedido>();
     if (p == null)
     {
         m = String.Format("El pedido {0} no existe.", l.NumeroPedido);
         return m;
     }
     // ahora se compara contra línea, luego hay que buscar la línea correspondiente
     LinPedido lp = (from linped in ctx.LinPedidos
                     where linped.NumPedido == l.NumeroPedido
                     && linped.NumLinea == l.NumLineaPedido
                     select linped).FirstOrDefault<LinPedido>();
     if (lp == null)
     {
         m = String.Format("El linea {0} del pedido {1} no existe.",l.NumLineaPedido, l.NumeroPedido);
         return m;
     }
     // Obtener parámetros y datos de proveedor para verificar márgenes
     Parametro parametro = (from par in ctx.Parametros1
                            where par.ParametroId == 1
                            select par).FirstOrDefault<Parametro>();
     Proveedor proveedor = p.Proveedor;
     //
     bool facAbierto = parametro.FacturaAbierto;
     facAbierto = proveedor.FacAbierto;
     int margen = parametro.MargenFactura;
     if (p.Estado == "FACTURADO" || p.Estado == "CANCELADO")
     {
         m = String.Format("El pedido {0} ya ha sido facturado o está cancelado.", l.NumeroPedido);
         return m;
     }
     if (p.Proveedor.ProveedorId != factura.Proveedor.ProveedorId)
     {
         m = String.Format("El pedido {0} no corresponde al proveedor {1}", l.NumeroPedido, factura.Proveedor.NombreComercial);
         return m;
     }
     // (2) comprobar que el importe que se va a facturar es menor o igual que el del pedido
     if (l.Importe > ((lp.Importe - lp.Facturado) + margen))
     {
         m = String.Format("El importe {0:##,###,##0.00} supera el resto por facturar del pedido {1} linea {2}.", l.Importe, l.NumeroPedido, l.NumLineaPedido);
         return m;
     }
     // el estado por defecto de una factura es ACEPTADA, pero si es de un pedido ABIERTO  deberá ser RECIBIDA
     if (lp.Estado == "ABIERTO")
     {
         if (facAbierto)
         {
             factura.Estado = "RECIBIDA2";
             factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} pasa a estado {3} debido a que el pedido {4} linea {5} no está recibido, se espera a su aceptación manual <br/>",
                 DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado, lp.NumPedido, lp.NumLinea);
         }
         else
         {
             m = String.Format("El pedido {0} linea {1} no está recibido, no puede emitir la factura contra él", lp.NumPedido, lp.NumLinea);
             return m;
         }
     }
     // si llega aquí es una linea a dar de alta.
     lp.Facturado = l.Importe;
     factura.TotalFactura += l.Importe;
     p.TotalFacturado += l.Importe;
     // actualizar empresa y responsables
     factura.Empresa = p.Empresa;
     factura.Responsable = p.Responsable;
     l.CabFactura = factura;
     ctx.Add(l);
     ctx.SaveChanges();
     return m;
 }
 /// <summary>
 /// Crear un nueva solicitud
 /// </summary>
 /// <param name="Proveedor">Objeto a crear, el atributo SolicitudProveedorId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorización (se debe obtener con la accion Login). Caso especial "solicitud"</param>
 /// <returns></returns>
 public virtual SolicitudProveedor Post(SolicitudProveedor solProveedor, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         // se permite el que lleva el texto "solicitud" siempre
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx) && tk != "solicitud")
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Solicitudes proveedores)"));
         }
         // comprobar las precondiciones
         if (solProveedor == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         int grupoProveedorId = 0;
         int solicitudStatusId = 1; // cuando se crean las solicitudes su estado es pendiente.
         // Controlamos las propiedades que son en realidad objetos.
         if (solProveedor.GrupoProveedor != null)
         {
             grupoProveedorId = solProveedor.GrupoProveedor.GrupoProveedorId;
             solProveedor.GrupoProveedor = null;
         }
         
         // justo antes de darlo de alta le ponemos el sello
         solProveedor.Sello = DateTime.Now;
         // por defecto su estado es pendiente ID=1
         solProveedor.SolicitudStatus = (from ss in ctx.SolicitudStatus
                                         where ss.SolicitudStatusId == 1
                                         select ss).FirstOrDefault<SolicitudStatus>();
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(solProveedor);
         // eliminamos los documentos asociados si los hay
         // los dará de alta otro proceso.
         foreach (Documento d in solProveedor.Documentos)
         {
             PortalProWebUtility.EliminarDocumento(d, ctx);
         }
         if (grupoProveedorId != 0)
         {
             solProveedor.GrupoProveedor = (from gp in ctx.GrupoProveedors
                                            where gp.GrupoProveedorId == grupoProveedorId
                                            select gp).FirstOrDefault<GrupoProveedor>();
         }
         if (solicitudStatusId != 0)
         {
             solProveedor.SolicitudStatus = (from ss in ctx.SolicitudStatus
                                             where ss.SolicitudStatusId == solicitudStatusId
                                             select ss).FirstOrDefault<SolicitudStatus>();
         }
         ctx.SaveChanges();
         // preparamos y enviamos el correo de confirmación por defecto (por si falla la plantilla).
         string asunto = "[PortalPro] Recibida solicitud";
         string cuerpo = String.Format("Su solicitud con ID:{0} ha sido recibida. No responda este mensaje", solProveedor.SolicitudProveedorId);
         // El primer paso es obtener la plantilla ID=1
         Plantilla plantilla = (from pl in ctx.Plantillas
                                where pl.PlantillaId == 1
                                select pl).FirstOrDefault<Plantilla>();
         if (plantilla != null)
         {
             asunto = String.Format(plantilla.Asunto, solProveedor.SolicitudProveedorId, solProveedor.RazonSocial, solProveedor.Direccion, solProveedor.Localidad,
                 solProveedor.CodPostal, solProveedor.Provincia, solProveedor.Comunidad, solProveedor.Pais, solProveedor.Telefono, solProveedor.Fax,
                 solProveedor.Movil, solProveedor.Email, solProveedor.Url, solProveedor.Nif);
             cuerpo = String.Format(plantilla.Cuerpo, solProveedor.SolicitudProveedorId, solProveedor.RazonSocial, solProveedor.Direccion, solProveedor.Localidad,
                 solProveedor.CodPostal, solProveedor.Provincia, solProveedor.Comunidad, solProveedor.Pais, solProveedor.Telefono, solProveedor.Fax,
                 solProveedor.Movil, solProveedor.Email, solProveedor.Url, solProveedor.Nif);
         }
         PortalProMailController.SendEmail(solProveedor.Email, asunto, cuerpo);
         return ctx.CreateDetachedCopy<SolicitudProveedor>(solProveedor, x => x.GrupoProveedor);
     }
 }
示例#20
0
 public static CabFactura GenerarFacturaDesdePedidos(int[] pedidos, PortalProContext ctx)
 {
     CabFactura factura = null; // provisional
     if (pedidos.Length == 0) return factura; // está vacío el array de ids
     if (!TodosLosPedidosExisten(pedidos, ctx)) return factura; // no existen todos los pedidos de la lista
     // creamos la cabecera de factura
     factura = new CabFactura();
     factura.Generada = true;
     factura.FechaAlta = DateTime.Now;
     // obtenemos el proveedor del primer pedido, en teoría todos son del mismo
     Pedido ped = (from p in ctx.Pedidos
                   where p.PedidoId == pedidos[0]
                   select p).FirstOrDefault<Pedido>();
     factura.Proveedor = ped.Proveedor;
     ctx.Add(factura);
     ctx.SaveChanges();
     CrearLineasFacturaDesdePedidos(factura, pedidos, ctx);
     return factura;
 }
示例#21
0
 // este método se ejecutará de manera asíncrona.
 public string LaunchProveedor(out int threadId)
 {
     threadId = Thread.CurrentThread.ManagedThreadId;
     // abrir conexiones 
     PortalProContext ctx = new PortalProContext();
     string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
     SqlConnection con = new SqlConnection(strConnect);
     con.Open();
     string sql = "SELECT COUNT(*) FROM [PortalProTest].[dbo].[Cau_PortalPro_VProveedores]";
     SqlCommand cmd = new SqlCommand(sql, con);
     int totreg = (int)cmd.ExecuteScalar();
     int numreg = 0;
     sql = @"SELECT  
                 [ACCOUNTNUM]
                 ,[NAME]
                 ,[ADDRESS]
                 ,[CITY]
                 ,[ZIPCODE]
                 ,[COUNTRYREGIONID]
                 ,[PHONE]
                 ,[TELEFAX]
                 ,[CELLULARPHONE]
                 ,[EMAIL]
                 ,[VATNUM]
                 ,[CONTACTO]
                 ,[LINEOFBUSINESSID]
                 ,[CAUPORTALPROEMAIL]
                 ,[BANKIBAN]
                 ,[CAUPORTALPROALLOWINVOICE]
             FROM [PortalProTest].[dbo].[Cau_PortalPro_VProveedores]";
     cmd = new SqlCommand(sql, con);
     SqlDataReader dr = cmd.ExecuteReader();
     while (dr.Read())
     {
         numreg++;
         string accountnum = dr.GetString(0);
         Proveedor pr2 = (from p2 in ctx.Proveedors
                          where p2.CodAx == accountnum
                          select p2).FirstOrDefault<Proveedor>();
         if (pr2 == null)
         {
             pr2 = new Proveedor();
             ctx.Add(pr2);
         }
         pr2.CodAx = accountnum;
         pr2.NombreComercial = dr.GetString(1);
         pr2.RazonSocial = dr.GetString(1);
         pr2.Direccion = dr.GetString(2);
         pr2.Localidad = dr.GetString(3);
         pr2.CodPostal = dr.GetString(4);
         pr2.Pais = dr.GetString(5);
         pr2.Telefono = dr.GetString(6);
         pr2.Fax = dr.GetString(7);
         pr2.Movil = dr.GetString(8);
         pr2.Email = dr.GetString(9);
         pr2.Nif = dr.GetString(10);
         if (!dr.IsDBNull(11)) pr2.PersonaContacto = dr.GetString(11);
         pr2.EmailFacturas = dr.GetString(13);
         if (!dr.IsDBNull(14)) pr2.IBAN = dr.GetString(14);
         ctx.SaveChanges();
         // Actualizar los registros de proceso
         Progresos progreso = (from p in ctx.Progresos
                               where p.ProgresoId == 2
                               select p).FirstOrDefault<Progresos>();
         if (progreso != null)
         {
             progreso.NumReg = numreg;
             progreso.TotReg = totreg;
             ctx.SaveChanges();
         }
     }
     dr.Close();
     ctx.Dispose();
     con.Close();
     con.Dispose();
     return "";
 }
示例#22
0
 public static void CrearLineasFacturaDesdeUnPedido(CabFactura factura, Pedido pedido, PortalProContext ctx)
 {
     // procesamos secuencialmente las lineas de este pedido.
     foreach (LinPedido lp in pedido.LinPedidos)
     {
         // la primera condición es que quede algo que facturar
         if (lp.Facturado < lp.Importe)
         {
             decimal importe = lp.Importe - lp.Facturado;
             LinFactura lf = new LinFactura();
             lf.CabFactura = factura;
             lf.Descripcion = lp.Descripcion;
             lf.Importe = importe;
             lf.NumeroPedido = lp.NumPedido;
             lf.NumLineaPedido = lp.NumLinea;
             factura.TotalFactura += importe;
             ctx.Add(lf);
             ctx.SaveChanges();
         }
     }
 }
示例#23
0
 /// <summary>
 /// Crear un nuevo proveedor
 /// </summary>
 /// <param name="Proveedor">Objeto a crear, el atributo ProveedorId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param>
 /// <returns></returns>
 public virtual Proveedor Post(Proveedor proveedor, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Proveedores)"));
         }
         // comprobar las precondiciones
         if (proveedor == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         int grupoProveedorId = 0;
         // Controlamos las propiedades que son en realidad objetos.
         if (proveedor.GrupoProveedor != null)
         {
             grupoProveedorId = proveedor.GrupoProveedor.GrupoProveedorId;
             proveedor.GrupoProveedor = null;
         }
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(proveedor);
         if (grupoProveedorId != 0)
         {
             proveedor.GrupoProveedor = (from gp in ctx.GrupoProveedors
                                     where gp.GrupoProveedorId == grupoProveedorId
                                     select gp).FirstOrDefault<GrupoProveedor>();
         }
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<Proveedor>(proveedor, x => x.GrupoProveedor);
     }
 }
示例#24
0
 /// <summary>
 /// Crear una nueva línea de factura
 /// </summary>
 /// <param name="LinFactura">Objeto a crear, el atributo LinFacturaId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param>
 /// <returns></returns>
 public virtual LinFactura Post(LinFactura linea, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (LinFactura)"));
         }
         // comprobar las precondiciones
         if (linea == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         int cabFacturaId = 0;
         // Controlamos las propiedades que son en realidad objetos.
         if (linea.CabFactura != null)
         {
             cabFacturaId = linea.CabFactura.CabFacturaId;
             linea.CabFactura = null;
         }
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(linea);
         if (cabFacturaId != 0)
         {
             linea.CabFactura = (from f in ctx.CabFacturas
                                 where f.CabFacturaId == cabFacturaId
                                 select f).FirstOrDefault<CabFactura>();
         }
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<LinFactura>(linea, x => x.CabFactura);
     }
 }
示例#25
0
 private void LoadAssociateLines(string numFactura, DateTime fechaFactura)
 {
     PortalProContext ctx = new PortalProContext();
     // buscamos la cabecera de pedido relacionada
     CabFactura factura = (from f in ctx.CabFacturas
                           where f.NumFactura == numFactura &&
                                 f.FechaEmision == fechaFactura
                           select f).FirstOrDefault<CabFactura>();
     string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
     SqlConnection con = new SqlConnection(strConnect);
     con.Open();
     string sqlb = @"SELECT [INVOICEID]
                       ,[INVOICEDATE]
                       ,[LINENUM]
                       ,[PURCHID]
                       ,[LINEAMOUNT]
                       ,[PORIVA]
                   FROM [PortalProTest].[dbo].[Cau_portalpro_VLinFactura] WHERE [INVOICEID] = '{0}' AND [INVOICEDATE] = '{1:yyyMMdd}';";
     string sql = String.Format(sqlb, numFactura, fechaFactura);
     SqlCommand cmd = new SqlCommand(sql, con);
     SqlDataReader dr = cmd.ExecuteReader();
     while (dr.Read())
     {
         int numLinea = (int)(dr.GetDecimal(2));
         // --
         LinFactura lf = (from l in ctx.LinFacturas
                          where l.NumFactura == numFactura &&
                                l.FechaEmision == fechaFactura &&
                                l.NumLineaFactura == numLinea
                          select l).FirstOrDefault<LinFactura>();
         if (lf == null)
         {
             lf = new LinFactura();
             ctx.Add(lf);
         }
         lf.CabFactura = factura;
         lf.NumFactura = numFactura;
         lf.FechaEmision = fechaFactura;
         lf.NumLineaFactura = numLinea;
         lf.Descripcion = "";
         lf.Importe = dr.GetDecimal(4);
         lf.PorcentajeIva = dr.GetDecimal(5);
         ctx.SaveChanges();
     }
     dr.Close();
     ctx.Dispose();
     con.Close();
     con.Dispose();
 }
示例#26
0
 /// <summary>
 /// Crear un nuevo Parametro de proveedores
 /// </summary>
 /// <param name="parametro">Objeto a crear, el atributo ParametroId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param>
 /// <returns></returns>
 public virtual Parametro Post(Parametro parametro, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Parametros)"));
         }
         // comprobar las precondiciones
         if (parametro == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(parametro);
         ctx.SaveChanges();
         return parametro;
     }
 }
示例#27
0
        private void LoadAssociateLines(string numPedido)
        {
            PortalProContext ctx = new PortalProContext();
            // buscamos la cabecera de pedido relacionada
            Pedido pedido = (from p in ctx.Pedidos
                             where p.NumPedido == numPedido
                             select p).FirstOrDefault<Pedido>();
            string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString;
            SqlConnection con = new SqlConnection(strConnect);
            con.Open();
            string sqlb = @"SELECT [PURCHID]
                              ,[LINENUM]
                              ,[ITEMID]
                              ,[NAME]
                              ,[PURCHQTY]
                              ,[PURCHUNIT]
                              ,[PURCHPRICE]
                              ,[LINEAMOUNT]
                              ,[ESTADO]
                              ,[REMAINPURCHPHYSICAL]
                              ,[REMAINPURCHFINANCIAL]
                              ,[FECHARECEPCION]
                              ,[INVENTTRANSID]
                          FROM [dbo].[Cau_PortalPro_VLinPedido]  WHERE [PURCHID] = '{0}';";
            string sql = String.Format(sqlb, numPedido);
            SqlCommand cmd = new SqlCommand(sql, con);
            SqlDataReader dr = cmd.ExecuteReader();
            decimal totalPedido = 0;
            decimal totalFacturado = 0;
            while (dr.Read())
            {
                int numLinea = (int)(dr.GetDecimal(1));
                // --
                LinPedido lped = (from lp in ctx.LinPedidos
                                  where lp.NumPedido == numPedido
                                  && lp.NumLinea == numLinea
                                  select lp).FirstOrDefault<LinPedido>();
                if (lped == null)
                {
                    lped = new LinPedido();
                    ctx.Add(lped);
                }
                lped.Pedido = pedido;
                lped.NumPedido = numPedido;
                lped.NumLinea = numLinea;
                lped.InventTransId = dr.GetString(12);
                lped.Descripcion = dr.GetString(3);
                lped.Importe = dr.GetDecimal(7);
                totalPedido += lped.Importe;
                string estado = dr.GetString(8);
                switch (estado)
                {
                    case "Facturado":
                        lped.Estado = "FACTURADO";
                        lped.Facturado = lped.Importe;
                        totalFacturado += lped.Importe;
                        break;
                    case "Recibido":
                        lped.Estado = "RECIBIDO";
                        break;
                    case "Pedido Abierto":
                        lped.Estado = "ABIERTO";
                        break;

                }
                if (!dr.IsDBNull(11)) lped.FechaRecepcion = dr.GetDateTime(11);
            }
            pedido.TotalPedido = totalPedido;
            pedido.TotalFacturado = totalFacturado;
            try
            {
                ctx.SaveChanges();
            }
            catch (Exception ex)
            {
            }
            dr.Close();
            ctx.Dispose();
            con.Close();
            con.Dispose();
        }
示例#28
0
 /// <summary>
 /// Crear un nueva cabecera de factura
 /// </summary>
 /// <param name="CabFactura">Objeto a crear, el atributo CabFacturaId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
 /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param>
 /// <returns></returns>
 public virtual CabFactura Post(CabFactura factura, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (CabFactura)"));
         }
         // comprobar las precondiciones
         if (factura == null)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // comprobamos que no hay una factura para el mismo proveedor en ese año y con
         // el mismo número de factura
         CabFactura f = PortalProWebUtility.YaExisteUnaFacturaComoEsta(factura, ctx);
         if (f != null)
         {
             string m = String.Format("Ya hay una factura del proveedor para este año {0:yyyy} con el mismo número {1}", f.FechaEmision, f.NumFactura);
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, m));
         }
         // Controlamos las propiedades que son en realidad objetos.
         int proveedorId = 0;
         if (factura.Proveedor != null)
         {
             proveedorId = factura.Proveedor.ProveedorId;
             factura.Proveedor = null;
         }
         int documentoPdfId = 0;
         if (factura.DocumentoPdf != null)
         {
             documentoPdfId = factura.DocumentoPdf.DocumentoId;
             factura.DocumentoPdf = null;
         }
         int documentoXmlId = 0;
         if (factura.DocumentoXml != null)
         {
             documentoXmlId = factura.DocumentoXml.DocumentoId;
             factura.DocumentoXml = null;
         }
         int empresaId = 0;
         if (factura.Empresa != null) 
         {
             empresaId = factura.Empresa.EmpresaId;
             factura.Empresa = null;
         }
         int responsableId = 0;
         if (factura.Responsable != null)
         {
             responsableId = factura.Responsable.ResponsableId;
             factura.Responsable = null;
         }
         // las facturas por defecto tienen el estado recibida
         factura.Estado = "ACEPTADA";
         // dar de alta el objeto en la base de datos y devolverlo en el mensaje
         ctx.Add(factura);
         if (proveedorId != 0)
         {
             factura.Proveedor = (from p in ctx.Proveedors
                                  where p.ProveedorId == proveedorId
                                  select p).FirstOrDefault<Proveedor>();
         }
         if (documentoPdfId != 0)
         {
             factura.DocumentoPdf = (from d in ctx.Documentos
                                     where d.DocumentoId == documentoPdfId
                                     select d).FirstOrDefault<Documento>();
         }
         if (documentoXmlId != 0)
         {
             factura.DocumentoXml = (from d in ctx.Documentos
                                     where d.DocumentoId == documentoXmlId
                                     select d).FirstOrDefault<Documento>();
         }
         if (empresaId != 0)
         {
             factura.Empresa = (from e in ctx.Empresas
                                where e.EmpresaId == empresaId
                                select e).FirstOrDefault<Empresa>();
         }
         if (responsableId != 0)
         {
             factura.Responsable = (from r in ctx.Responsables
                                    where r.ResponsableId == responsableId
                                    select r).FirstOrDefault<Responsable>();
         }
         factura.FechaAlta = DateTime.Now;
         factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido creada con estado {3} <br/>",
             DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado);
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml);
     }
 }
        /// <summary>
        /// Crear un nuevo solog
        /// </summary>
        /// <param name="SolicitudLog">Objeto a crear, el atributo SolicitudLogId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param>
        /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param>
        /// <returns></returns>
        public virtual SolicitudLog Post(SolicitudLog solog, string tk)
        {
            using (PortalProContext ctx = new PortalProContext())
            {
                // comprobar el tique
                if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (SolicitudLogs)"));
                }
                // comprobar las precondiciones
                if (solog == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
                }
                int usuarioId = 0;
                int solicitudProveedorId = 0;
                int solStatusFinId = 0;
                int solStatusInicioId = 0;

                // Controlamos las propiedades que son en realidad objetos.
                if (solog.Usuario != null)
                {
                    usuarioId = solog.Usuario.UsuarioId;
                    solog.Usuario = null;
                }
                if (solog.SolicitudProveedor != null)
                {
                    solicitudProveedorId = solog.SolicitudProveedor.SolicitudProveedorId;
                    solog.SolicitudProveedor = null;
                }
                if (solog.SolicitudStatusInicial != null)
                {
                    solStatusInicioId = solog.SolicitudStatusInicial.SolicitudStatusId;
                    solog.SolicitudStatusInicial = null;
                }
                if (solog.SolicitudStatusFinal != null)
                {
                    solStatusFinId = solog.SolicitudStatusFinal.SolicitudStatusId;
                    solog.SolicitudStatusFinal = null;
                }
                // dar de alta el objeto en la base de datos y devolverlo en el mensaje
                ctx.Add(solog);
                if (usuarioId != 0)
                {
                    solog.Usuario = (from u in ctx.Usuarios
                                     where u.UsuarioId == usuarioId
                                     select u).FirstOrDefault<Usuario>();
                }
                if (solicitudProveedorId != 0)
                {
                    solog.SolicitudProveedor = (from s in ctx.SolicitudProveedors
                                                select s).FirstOrDefault<SolicitudProveedor>();
                }
                if (solStatusInicioId != 0)
                {
                    solog.SolicitudStatusInicial = (from s in ctx.SolicitudStatus
                                                    select s).FirstOrDefault<SolicitudStatus>();
                }
                if (solStatusFinId != 0)
                {
                    solog.SolicitudStatusFinal = (from s in ctx.SolicitudStatus
                                                  select s).FirstOrDefault<SolicitudStatus>();
                }
                ctx.SaveChanges();
                return ctx.CreateDetachedCopy<SolicitudLog>(solog, x => x.Usuario, x => x.SolicitudProveedor, x => x.SolicitudStatusInicial, x => x.SolicitudStatusFinal);
            }
        }
 /// <summary>
 /// Se utiliza para cargar los tipos de documentos asociados a un grupo de proveedores
 /// </summary>
 /// <param name="tipos">Vector de enteros con los identificadores de los tipos de documento a asociar</param>
 /// <param name="tk">Tique de autorización (ver Login)</param>
 /// <param name="grupoCode">Identificador del grupo de proveedores</param>
 /// <returns></returns>
 public virtual bool Post(IList<int> tipos, string tk, string grupoCode)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         if (CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
             int id = 0;
             bool res = int.TryParse(grupoCode, out id);
             GrupoProveedor grupoProveedor = (from gp in ctx.GrupoProveedors
                                              where gp.GrupoProveedorId == id
                                              select gp).FirstOrDefault<GrupoProveedor>();
             if (grupoProveedor == null)
             {
                 throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Debe proporcionar un grupo de proveedores existente"));
             }
             // eliminamos todos os asociados posibles, que serán sustituidos por los nuevos
             ctx.Delete(grupoProveedor.TipoDocumentoGrupoProveedors);
             // vamos a comprobar todos los id pasados
             foreach (int i in tipos)
             {
                 // ya está en la lista de este grupo
                 TipoDocumentoGrupoProveedor tdgp = new TipoDocumentoGrupoProveedor();
                 tdgp.GrupoProveedor = grupoProveedor;
                 TipoDocumento td = (from t in ctx.TipoDocumentos
                                     where t.TipoDocumentoId == i
                                     select t).FirstOrDefault<TipoDocumento>();
                 if (td != null)
                 {
                     tdgp.TipoDocumento = td;
                     ctx.Add(tdgp);
                 }
             }
             ctx.SaveChanges();
         }
     }
     return true;
 }