// 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 ""; }
// 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 ""; }
/// <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> /// 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 ); } }
// 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; } }
// 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 ""; }
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); } }
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 ""; }