// 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 "";
 }
Beispiel #2
0
        // este método se ejecutará de manera asíncrona.
        public string LaunchPedido(out int threadId)
        {
            threadId = Thread.CurrentThread.ManagedThreadId;
            int numreg = 0;
            int totreg = 0;
            PortalProContext ctx = new PortalProContext();
            EntitiesModel con = new EntitiesModel();
            var rs = (from cp in con.Cau_PortalPro_VCabPedidos
                      select cp);
            totreg = rs.Count();
            foreach (Cau_PortalPro_VCabPedido cp1 in rs)
            {
                numreg++;
                // Buscamos si ese pedido ya existe
                Pedido p2 = (from p in ctx.Pedidos
                             where p.NumPedido == cp1.PURCHID
                             select p).FirstOrDefault<Pedido>();
                if (p2 == null)
                {
                    p2 = new Pedido();
                    p2.NumPedido = cp1.PURCHID;
                    p2.FechaAlta = cp1.CREATEDDATE;
                    // buscamos al proveedor
                    p2.Proveedor = (from pr in ctx.Proveedors
                                    where pr.CodAx == cp1.INVOICEACCOUNT
                                    select pr).FirstOrDefault<Proveedor>();
                    p2.TotalPedido = 0;
                    p2.TotalFacturado = 0;
                    p2.Estado = cp1.ESTADO;
                    p2.DocumentoPdf = null;
                    p2.DocumentoXml = null;
                    p2.TipoPedido = cp1.TIPO;
                    // buscar la empresa
                    p2.Empresa = (from e in ctx.Empresas
                                  where e.CodAx == cp1.DATAAREAID
                                  select e).FirstOrDefault<Empresa>();
                    p2.FechaLimite = cp1.FECHALIMITE;
                    p2.FechaRecepcion = cp1.FECHARECEPCION;
                }
                else
                {

                }
                // 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 = numreg;
                    progreso.TotReg = totreg;
                    ctx.SaveChanges();
                }
            }
            return "";
        }
Beispiel #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;
         }
     }
 }
Beispiel #4
0
 /// <summary>
 /// Renueva el tique por 30 minutos adicionales
 /// </summary>
 /// <param name="tk">Tique que se desea renovar</param>
 /// <returns></returns>
 public virtual WebApiTicket PutLogin(string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprueba el tique
         if (!CntWebApiSeguridad.CheckTicket(tk, ctx))
         {
              throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Login)"));
         }
         // renueva el tique por 30 minutos más
         // en el futuro todo esto debería ser parametrizable
         WebApiTicket wtck = (from t in ctx.WebApiTickets
                              where t.Codigo == tk
                              select t).FirstOrDefault<WebApiTicket>();
         // dado que ha habido una comprobación previa del tique éste 
         // debería existir.
         wtck.Fin = DateTime.Now.AddMinutes(30);
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<WebApiTicket>(wtck, x => x.Usuario);
     }
 }
 /// <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);
     }
 }
 /// <summary>
 /// Elimina el usuario que coincide con el id pasado
 /// </summary>
 /// <param name="id">Identificador del usuario a eliminar</param>
 /// <param name="tk">Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual bool Delete(int id, 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)"));
         }
         // primero buscamos si un grupo con ese id existe
         UsuarioProveedor usu = (from u in ctx.UsuarioProveedors
                        where u.UsuarioProveedorId == id
                        select u).FirstOrDefault<UsuarioProveedor>();
         // existe?
         if (usu == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un usuario con el id proporcionado (UsuarioProveedor)"));
         }
         ctx.Delete(usu);
         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>
 /// 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>
 /// Modificar un usuario ligado a un proveedor. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados
 /// </summary>
 /// <param name="id"> Identificador único del usuario </param>
 /// <param name="usuarioProveedor">Datos del usario ligado a proveedor</param>
 /// <param name="tk"> Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual UsuarioProveedor Put(int id, 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 los formatos
         if (usuarioProveedor == null || id != usuarioProveedor.UsuarioProveedorId)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // primero buscamos si un usuario con ese id existe
         UsuarioProveedor usup = (from up in ctx.UsuarioProveedors
                        where up.UsuarioProveedorId == id
                        select up).FirstOrDefault<UsuarioProveedor>();
         // existe?
         if (usup == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un usuario con el id proporcionado (UsuarioProveedor)"));
         }
         // controlar la contraseña.
         if (usuarioProveedor.Password != null && usuarioProveedor.Password != "" && usuarioProveedor.Password != usup.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;
         }
         // modificar el objeto
         ctx.AttachCopy<UsuarioProveedor>(usuarioProveedor);
         // volvemos a leer el objecto para que lo maneje este contexto.
         usuarioProveedor = (from up in ctx.UsuarioProveedors
                    where up.UsuarioProveedorId == id
                    select up).FirstOrDefault<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 );
     }
 }
Beispiel #10
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 "";
 }
 /// <summary>
 /// Elimina el log que coincide con el id pasado. La solicitud a la que pertenece
 /// pasa al estado de pendiente.
 /// </summary>
 /// <param name="id">Identificador del log a eliminar</param>
 /// <param name="tk">Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual bool Delete(int id, 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)"));
         }
         // primero buscamos si un grupo con ese id existe
         SolicitudLog slg = (from s in ctx.SolicitudLogs
                             where s.SolicitudLogId == id
                             select s).FirstOrDefault<SolicitudLog>();
         // existe?
         if (slg == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un log con el id proporcionado (SolicitudLogs)"));
         }
         // salvamos la solicitud que habrá que actualizar
         SolicitudProveedor sp = slg.SolicitudProveedor;
         if (sp != null)
         {
             // Estado 1 = Pendiente
             sp.SolicitudStatus = (from s in ctx.SolicitudStatus
                                   where s.SolicitudStatusId == 1
                                   select s).FirstOrDefault<SolicitudStatus>();
         }
         ctx.Delete(slg);
         
         ctx.SaveChanges();
         return true;
     }
 }
 /// <summary>
 /// Elimina el proveedor que coincide con el id pasado
 /// </summary>
 /// <param name="id">Identificador del proveedor a eliminar</param>
 /// <param name="tk">Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual bool Delete(int id, 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)"));
         }
         // primero buscamos si un grupo con ese id existe
         Proveedor pro = (from u in ctx.Proveedors
                        where u.ProveedorId == id
                        select u).FirstOrDefault<Proveedor>();
         // existe?
         if (pro == null)
         {
              throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un grupo con el id proporcionado (Proveedores)"));
         }
         // hay que eliminar los ficheros asociados.
         foreach (Documento d in pro.Documentos)
         {
             PortalProWebUtility.EliminarDocumento(d, ctx);
         }
         ctx.Delete(pro);
         ctx.SaveChanges();
         return true;
     }
 }
Beispiel #13
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 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);
     }
 }
 /// <summary>
 /// Modificar un proveedor. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados
 /// </summary>
 /// <param name="id"> Identificador único del grupo </param>
 /// <param name="proveedor">Grupo de proveedor con los valores que se desean en sus atributos</param>
 /// <param name="tk"> Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual Proveedor Put(int id, 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 los formatos
         if (proveedor == null || id != proveedor.ProveedorId)
         {
             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 == id
                        select p).FirstOrDefault<Proveedor>();
         // existe?
         if (pro == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un proveedor con el id proporcionado (Proveedores)"));
         }
         int grupoProveedorId = 0;
         // Controlamos las propiedades que son en realidad objetos.
         if (proveedor.GrupoProveedor != null)
         {
             grupoProveedorId = proveedor.GrupoProveedor.GrupoProveedorId;
             proveedor.GrupoProveedor = null;
         }
         // modificar el objeto
         ctx.AttachCopy<Proveedor>(proveedor);
         // volvemos a leer el objecto para que lo maneje este contexto.
         proveedor = (from u in ctx.Proveedors
                    where u.ProveedorId == id
                    select u).FirstOrDefault<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);
     }
 }
 /// <summary>
 /// Modificar una cabecera de factura. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados
 /// </summary>
 /// <param name="id"> Identificador único de la cabecera de factura </param>
 /// <param name="factura">Cabecera de factura los valores que se desean en sus atributos</param>
 /// <param name="tk"> Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual CabFactura Put(int id, 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 los formatos
         if (factura == null || id != factura.CabFacturaId)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // primero buscamos si un factura con ese id existe
         CabFactura cfac = (from f in ctx.CabFacturas
                            where f.CabFacturaId == id
                            select f).FirstOrDefault<CabFactura>();
         // existe?
         if (cfac == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una factura con el id proporcionado (CabFactura)"));
         }
         if (factura.Estado == "PROCESADA")
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Las facturas procesadas no pueden ser modificadas (CabFactura)"));
         }
         // comprobamos que no hay una factura para el mismo proveedor en ese año y con
         // el mismo número de factura
         CabFactura fc = PortalProWebUtility.YaExisteUnaFacturaComoEsta(factura, ctx);
         if (fc != null)
         {
             string m = String.Format("Ya hay una factura del proveedor para este año {0:yyyy} con el mismo número {1}", fc.FechaEmision, fc.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;
         }
         // modificar el objeto
         if (factura.Estado == null)
             factura.Estado = "ACEPTADA";
         ctx.AttachCopy<CabFactura>(factura);
         // volvemos a leer el objecto para que lo maneje este contexto.
         factura = (from f in ctx.CabFacturas
                    where f.CabFacturaId == id
                    select f).FirstOrDefault<CabFactura>();
         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.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido modificada con estado {3} <br/>",
             DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado);
         factura.Generada = false;
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml);
     }
 }
 public virtual bool PutAdmisionProceso(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)"));
         }
         // se trata de pasar todas la faturas de aceptada a procesada
         var rs = (from f in ctx.CabFacturas
                   where f.Estado == "ACEPTADA"
                   select f);
         foreach (CabFactura fac in rs)
         {
             // las cambiamos individualmente de estado y las grabamos
             fac.Estado = "PROCESADA";
             fac.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € ha pasado al estado {3} por el usuario {4} <br/>",
                                 DateTime.Now, fac.NumFactura, fac.TotalFactura, fac.Estado, userId);
             ctx.SaveChanges();
         }
         return true;
     }
 }
 public virtual CabFactura PutCambioRevison(int id, string estado, 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 los formatos
         // primero buscamos si un factura con ese id existe
         CabFactura factura = (from f in ctx.CabFacturas
                            where f.CabFacturaId == id
                            select f).FirstOrDefault<CabFactura>();
         // existe?
         if (factura == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una factura con el id proporcionado (CabFactura)"));
         }
         factura.Estado = estado;
         factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € ha pasado al estado {3} por el usuario {4} con el motivo '{5}' <br/>",
             DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado, userId, "Revisión previa");
         ctx.SaveChanges();
         return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml);
     }
 }
        public virtual CabFactura PostGenerarFacturas(int[] pedidosSeleccionados, string gen, 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 que la lista de pedidos no está vacia.
                if (pedidosSeleccionados.Length == 0)
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay pedidos seleccionados para la generación (CabFactura)"));
                }
                // las facturas sobre pedidos de suscripción se realizan una a una.
                bool hayPedidoSuscripcion = PortalProWebUtility.PedidoSuscripcionHayUno(pedidosSeleccionados, ctx);
                CabFactura factura = null;
                if (pedidosSeleccionados.Length > 1 && hayPedidoSuscripcion)
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Los pedidos de suscripción se facturan individualmente (CabFactura)"));
                }
                if (hayPedidoSuscripcion)
                {
                    // solo hay un pedido y es de suscripción
                    Pedido pedido = (from p in ctx.Pedidos
                                     where p.PedidoId == pedidosSeleccionados[0]
                                     select p).FirstOrDefault<Pedido>();
                    if (pedido != null)
                    {
                        decimal totalAFacturar = PortalProWebUtility.PedidoSuscripcionImporteFacturable(pedido, DateTime.Now, ctx);
                        if (totalAFacturar == 0)
                        {
                            throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "El pedido de suscripción o ya ha sido facturado este mes o se ha superado la fecha límite. (CabFactura)"));
                        }
                        else
                        {
                            factura = PortalProWebUtility.PedidoSuscripcionGenerarFactura(pedido, totalAFacturar, ctx);
                        }
                    }
                }
                else
                {
                    // los pedidos son normales (no de suscripcíon)
                    factura = PortalProWebUtility.GenerarFacturaDesdePedidos(pedidosSeleccionados, ctx);
                }
                if (factura == null)
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Se ha producido un error en la generación de la factura (CabFactura)"));
                }
                
                factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido generada desde los pedidos <br/>",
                    DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado);
                factura.Generada = true;
                ctx.SaveChanges();

                return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml);
            }
        }
        public virtual CabFactura Post(string numPed, 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)"));
                }
                // comprobamos que hay un pedido que se corresopnden con el número pasado
                Pedido ped = (from p in ctx.Pedidos
                              where p.NumPedido == numPed
                              select p).FirstOrDefault<Pedido>();
                if (ped == null)
                {
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay pedido con el identificador pasado (generar factura) (CabFactura)"));
                }
                CabFactura factura = PortalProWebUtility.GenerarFacturaDesdePedido(ped, ctx);
                factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido generada con estado {3} a partir del pedido {4} <br/>",
                    DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado, numPed);
                factura.Generada = true;
                ctx.SaveChanges();

                return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml);
            }
        }
 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;
 }
        // 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 "";
        }
Beispiel #23
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();
 }
 /// <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);
     }
 }
Beispiel #25
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();
        }
 /// <summary>
 /// Modificar una solicitud. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados
 /// </summary>
 /// <param name="id"> Identificador único de la solicitud </param>
 /// <param name="solProveedor">Solicitud de proveedor con los valores que se desean en sus atributos</param>
 /// <param name="tk"> Tique de autorización (Ver 'Login'). Caso "solicitud"</param>
 /// <returns></returns>
 public virtual SolicitudProveedor Put(int id, SolicitudProveedor solProveedor, string tk)
 {
     using (PortalProContext ctx = new PortalProContext())
     {
         // comprobar el tique
         // se permite si el valor es "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 los formatos
         if (solProveedor == null || id != solProveedor.SolicitudProveedorId)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // primero buscamos si una solicitud con ese id existe
         SolicitudProveedor solPro = (from sp in ctx.SolicitudProveedors
                                      where sp.SolicitudProveedorId == id
                                      select sp).FirstOrDefault<SolicitudProveedor>();
         // existe?
         if (solPro == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una solicitud con el id proporcionado (Solicitudes proveedores)"));
         }
         int grupoProveedorId = 0;
         int solicitudStatusId = 0;
         // Controlamos las propiedades que son en realidad objetos.
         if (solProveedor.GrupoProveedor != null)
         {
             grupoProveedorId = solProveedor.GrupoProveedor.GrupoProveedorId;
             solProveedor.GrupoProveedor = null;
         }
         // modificar el objeto
         ctx.AttachCopy<SolicitudProveedor>(solProveedor);
         // volvemos a leer el objecto para que lo maneje este contexto.
         solProveedor = (from sp in ctx.SolicitudProveedors
                         where sp.SolicitudProveedorId == id
                         select sp).FirstOrDefault<SolicitudProveedor>();
         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();
         return ctx.CreateDetachedCopy<SolicitudProveedor>(solProveedor, x => x.GrupoProveedor, x => x.SolicitudStatus);
     }
 }
 /// <summary>
 /// Modificar un log de solicitud. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados
 /// </summary>
 /// <param name="id"> Identificador único del log </param>
 /// <param name="solog">Log de solicitud con los valores que se desean en sus atributos</param>
 /// <param name="tk"> Tique de autorización (Ver 'Login')</param>
 /// <returns></returns>
 public virtual SolicitudLog Put(int id, 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 los formatos
         if (solog == null || id != solog.SolicitudLogId)
         {
             throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         // primero buscamos si un solog con ese id existe
         SolicitudLog slg = (from u in ctx.SolicitudLogs
                             where u.SolicitudLogId == id
                             select u).FirstOrDefault<SolicitudLog>();
         // existe?
         if (slg == null)
         {
             throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un solog con el id proporcionado (SolicitudLogs)"));
         }
         //
         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;
         }
         // modificar el objeto
         ctx.AttachCopy<SolicitudLog>(solog);
         // volvemos a leer el objecto para que lo maneje este contexto.
         solog = (from s in ctx.SolicitudLogs
                  where s.SolicitudLogId == id
                  select s).FirstOrDefault<SolicitudLog>();
         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>
 /// 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;
 }
        /// <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);
            }
        }
 // 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 "";
 }