/// <summary> /// Factura que crea una receta con gastos de administracion /// </summary> /// <param name="sFolio"></param> /// <param name="lstDetalleFactura"></param> private string CrearFacturaGtoAdministrativo(string sFolio,List<MedNeg.Facturas.BlDetalleFacturaReceta> lstDetalleFactura) { //TODO: GT Paso 5: Paso opcional, aqui se genera la factura por gastos administrativos si lo eligio el usuario //objeto que contiene la receta string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); string sRutaCertificados = Server.MapPath("~/Archivos/"); bool bRegistroFallido = false; //MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas(); //MedNeg.Recetas.BlRecetas oblReceta = new MedNeg.Recetas.BlRecetas(); MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion(); MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion(); MedDAL.DAL.facturas oFacturas = new MedDAL.DAL.facturas(); MedNeg.Facturas.BlFacturas oblFacturas = new MedNeg.Facturas.BlFacturas(); //decimal dSubtotal = 0; //int idReceta = 0; odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig); //ID Cliente oFacturas.idCliente = (int)Session["sIdCliente"]; //IDRECETA //oFacturas.idReceta = oReceta.idReceta; //Asiganr el folio de la factura if (odalConfiguracion.iFacturasAutomatico == 1) { oFacturas.Folio = odalConfiguracion.iFolioFacturas++.ToString(); } else { //oFacturas.Folio = oReceta.Folio; oFacturas.Folio = sFolio + "-GastoAdm"; } string sIdFolioFactura = oFacturas.Folio; //Fecha oFacturas.Fecha = DateTime.Now; oFacturas.FechaAplicacion = DateTime.Now; //tipo (4 por que son de receta) oFacturas.TipoFactura = "4"; //Estatus (3 de emitida) oFacturas.Estatus = "3"; //Id del usuario que genero la factura oFacturas.idUsuario = Convert.ToInt32(Session["usuarioid"]); //Nombre del vendedor que en este caso es el usuario oFacturas.Vendedor = Session["nombre"].ToString(); //Registrar la factura if (oblFacturas.NuevoRegistro(oFacturas)) { oFacturas = new MedDAL.DAL.facturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); ////Recuperar el id de la factura crea| da oFacturas = oblFacturas.BuscarFacturasFolio(sIdFolioFactura); //Actualizar el consecutivo en la bitacora oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig); //Insertar el detalle de factura //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida foreach (MedNeg.Facturas.BlDetalleFacturaReceta renglon in lstDetalleFactura) { oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); oFacturaPartida.idFactura = oFacturas.idFactura; oFacturaPartida.idProducto = renglon.iIdProducto; oFacturaPartida.Cantidad = renglon.dCantidad; oFacturaPartida.IEPS = renglon.dIeps; oFacturaPartida.Iva = renglon.DImp1 * consdIva; oFacturaPartida.Precio = renglon.DImp1; //Registrar el detalle del pedido if (!oblFacturas.NuevoDetallePartida(oFacturaPartida)) { bRegistroFallido = true; } else { } } //TODO: GT Paso 5.1 Aqui si bRegistroFallido es false entonces aqui se generaria la factura electronica de gastos administrativos if (cmbModoFactura.SelectedValue == "2" && !bRegistroFallido) { oblFacturas = new MedNeg.Facturas.BlFacturas(); oblFacturas.GenerarFacturaElectronica(oFacturas.idFactura, sRutaCertificados, Session["usuario"].ToString(), (int)Session["sIdCliente"], oFacturas.Folio); return Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".xml"); //System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicas/FacturaE-" + oFacturas.Folio + ".xml")); //Response.Clear(); //Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); //Response.AddHeader("Content-Length", fFactura.Length.ToString()); //Response.ContentType = "application/...."; //Response.WriteFile(fFactura.FullName); //Response.End(); } return ""; } return ""; }
private void Eliminar(int iIdFactura) { //Eliminar primero la partida para la integridad referencial oblFacturas = new MedNeg.Facturas.BlFacturas(); string sDatosBitacora = string.Empty; //Guardar los datos del pedido para la bitacora oFactura = new MedDAL.DAL.facturas(); oFactura = oblFacturas.BuscarFactura(iIdFactura); sDatosBitacora += "Folio:" + oFactura.Folio.ToString() + " "; sDatosBitacora += "Fecha:" + oFactura.Fecha.ToShortDateString() + " "; switch (oFactura.Estatus) { case "1": sDatosBitacora += "Estatus:Pedido "; break; case "2": sDatosBitacora += "Estatus:Remitido "; break; case "3": sDatosBitacora += "Estatus:Emitida "; break; case "4": sDatosBitacora += "Estatus:Cobrada "; break; case "5": sDatosBitacora += "Estatus:Cancelada "; break; } //Recuperar la partida del pedido oblFacturas = new MedNeg.Facturas.BlFacturas(); var oQuery = oblFacturas.RecuperarPartidaFactura(iIdFactura); //Recorrer el resultado y meterlo al datagridview foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { sDatosBitacora += "Producto:" + oDetalle.productos.Nombre.ToString() + " "; sDatosBitacora += "Cantidad:" + oDetalle.Cantidad.ToString() + " "; sDatosBitacora += "IEPS:" + oDetalle.IEPS.ToString() + " "; sDatosBitacora += "Iva:" + oDetalle.Iva.ToString() + " "; sDatosBitacora += "Precio:" + oDetalle.Precio.ToString() + " "; sDatosBitacora += "Total:" + Convert.ToDecimal((oDetalle.Cantidad * oDetalle.Precio) + oDetalle.IEPS + oDetalle.Iva) + ", "; } if (oblFacturas.EliminarFacturaPartida(iIdFactura)) { oblFacturas = new MedNeg.Facturas.BlFacturas(); if (oblFacturas.EliminarRegistro(iIdFactura)) { //lblAviso.Text = "El usuario se ha eliminado con éxito"; MedDAL.DAL.bitacora oBitacora = new MedDAL.DAL.bitacora(); MedNeg.Bitacora.BlBitacora oblBitacora = new MedNeg.Bitacora.BlBitacora(); oBitacora.FechaEntradaSrv = DateTime.Now; oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal oBitacora.Modulo = "Facturas"; oBitacora.Usuario = Session["usuario"].ToString(); oBitacora.Nombre = Session["nombre"].ToString(); oBitacora.Accion = "Eliminación de Factura"; oBitacora.Descripcion = sDatosBitacora; if (!oblBitacora.NuevoRegistro(oBitacora)) { lblDatos.Text = "El evento no pudo ser registrado en la bitácora"; } } else { //lblAviso.Text = "El usuario no pudo ser eliminado, es posible que tenga datos relacionados"; } } else { //lblAviso.Text = "El usuario no pudo ser eliminado, es posible que tenga datos relacionados"; } }
private string CrearFacturaSubTotales(string sFolio,decimal dSubtotalFacturar) { //TODO: GT Paso 6: Paso opcional, aqui se genera la factura por sub totales si lo eligio el usuario //objeto que contiene la receta string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); string sRutaCertificados = Server.MapPath("~/Archivos/"); bool bRegistroFallido = false; //MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas(); //MedNeg.Recetas.BlRecetas oblReceta = new MedNeg.Recetas.BlRecetas(); MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion(); MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion(); MedDAL.DAL.facturas oFacturas = new MedDAL.DAL.facturas(); MedNeg.Facturas.BlFacturas oblFacturas = new MedNeg.Facturas.BlFacturas(); //decimal dSubtotal = 0; //int idReceta = 0; odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig); //ID Cliente oFacturas.idCliente = (int)Session["sIdCliente"]; //IDRECETA //oFacturas.idReceta = oReceta.idReceta; //Asiganr el folio de la factura if (odalConfiguracion.iFacturasAutomatico == 1) { oFacturas.Folio = odalConfiguracion.iFolioFacturas++.ToString(); } else { //oFacturas.Folio = oReceta.Folio; oFacturas.Folio = sFolio + "-GastoAdm"; } string sIdFolioFactura = oFacturas.Folio; //Fecha oFacturas.Fecha = DateTime.Now; oFacturas.FechaAplicacion = DateTime.Now; //tipo (4 por que son de receta) oFacturas.TipoFactura = "4"; //Estatus (3 de emitida) oFacturas.Estatus = "3"; //Id del usuario que genero la factura oFacturas.idUsuario=Convert.ToInt32(Session["usuarioid"]); //Nombre del vendedor que en este caso es el usuario oFacturas.Vendedor = Session["nombre"].ToString(); //Registrar la factura if (oblFacturas.NuevoRegistro(oFacturas)) { oFacturas = new MedDAL.DAL.facturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); ////Recuperar el id de la factura crea| da oFacturas = oblFacturas.BuscarFacturasFolio(sIdFolioFactura); //Actualizar el consecutivo en la bitacora oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig); //Insertar el detalle de factura oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); oFacturaPartida.idFactura = oFacturas.idFactura; oFacturaPartida.idProducto = (int)Session["sIdProductoFxR"]; oFacturaPartida.Cantidad = 1; oFacturaPartida.IEPS = 0; //Identificar de cuanto va a ser la factura de subtotales, si un porciento del subtotal o un monto especifico if (txbMonto.Text == "" && txbPorcentaje.Text=="") { oFacturaPartida.Precio = dSubtotalFacturar; oFacturaPartida.Iva = dSubtotalFacturar * consdIva; } else if (txbMonto.Text != "") //El sub total es por monto { oFacturaPartida.Precio = Convert.ToDecimal(txbMonto.Text); oFacturaPartida.Iva = Convert.ToDecimal(txbMonto.Text) * consdIva; } else if(txbPorcentaje.Text!="") //El sub total es por porcentaje del monto de sub total { oFacturaPartida.Precio=dSubtotalFacturar*(Convert.ToDecimal(txbPorcentaje.Text)/100); oFacturaPartida.Iva=consdIva*(dSubtotalFacturar*(Convert.ToDecimal(txbPorcentaje.Text)/100)); } oFacturaPartida.Descripcion = txbProductos.Text; oFacturaPartida.Observaciones = ""; //Registrar el detalle del pedido if (!oblFacturas.NuevoDetallePartida(oFacturaPartida)) { bRegistroFallido = true; } else { } //TODO: GT Paso 6.1 Aqui si bRegistroFallido es false entonces aqui se generaria la factura electronica con los datos de sub totales if (cmbModoFactura.SelectedValue == "2" && !bRegistroFallido) { oblFacturas = new MedNeg.Facturas.BlFacturas(); oblFacturas.GenerarFacturaElectronica(oFacturas.idFactura, sRutaCertificados, Session["usuario"].ToString(), (int)Session["sIdCliente"], oFacturas.Folio); return Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".xml"); //System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicas/FacturaE-" + oFacturas.Folio + ".xml")); //Response.Clear(); //Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); //Response.AddHeader("Content-Length", fFactura.Length.ToString()); //Response.ContentType = "application/...."; //Response.WriteFile(fFactura.FullName); //Response.End(); } return ""; } return ""; }
/// <summary> /// Cargar los datos del pedido y su partida /// </summary> /// <param name="bDatos"></param> protected void CargarFormulario(bool bDatos) { pnlFormulario.Visible = true; pnlCatalogo.Visible = false; if (bDatos) { //Objeto que contiene el id del pedido oblFacturas = new MedNeg.Facturas.BlFacturas(); oFactura = new MedDAL.DAL.facturas(); oFactura = (MedDAL.DAL.facturas)oblFacturas.BuscarFactura(int.Parse(dgvDatos.SelectedDataKey[0].ToString())); //Llenar los campos del pedido txbFolio.Text = oFactura.Folio; txbFecha.Text = oFactura.Fecha.ToShortDateString(); int iContador = 0; cmbEstatus.SelectedIndex = -1; foreach (ListItem elemento in cmbEstatus.Items) { if (elemento.Value.Equals(oFactura.Estatus.ToString())) { elemento.Selected = true; } iContador++; } cmbTipoFactura.SelectedIndex = -1; iContador = 0; foreach (ListItem elemento in cmbTipoFactura.Items) { if (elemento.Value.Equals(oFactura.TipoFactura.ToString())) { elemento.Selected = true; } iContador++; } //Llenar los campos del cliente txbCliente.Text = oFactura.clientes.Nombre + " " + oFactura.clientes.Apellidos; txbDireccion.Text = oFactura.clientes.Calle + " " + oFactura.clientes.NumeroExt; if (oFactura.clientes.NumeroInt != null) { txbDireccion.Text += "Int: " + oFactura.clientes.NumeroInt; } txbPoblacion.Text = oFactura.clientes.poblaciones.Nombre.ToString() + ", " + oFactura.clientes.municipios.Nombre.ToString() + ", " + oFactura.clientes.estados.Nombre.ToString(); //Lenar los datos de la partida del detalle oblFacturas = new MedNeg.Facturas.BlFacturas(); //Recuperar la partida del pedido var oQuery = oblFacturas.RecuperarPartidaFactura(oFactura.idFactura); //Session["lstDetallePartida"] = new List<MedNeg.Facturas.BlDetallePartida>(); if (((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Count() > 0) { ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Clear(); } //Recorrer el resultado y meterlo al datagridview Session["sTotalFactura"] = 0; foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { oblDetallePartida = new MedNeg.Facturas.BlDetallePartida( Convert.ToInt32(oDetalle.idProducto), oDetalle.productos.Clave1, oDetalle.productos.Nombre, oDetalle.Cantidad, Convert.ToDecimal(oDetalle.IEPS), Convert.ToDecimal(oDetalle.Iva), Convert.ToDecimal(oDetalle.Precio), oDetalle.Observaciones, Convert.ToDecimal((oDetalle.Precio * oDetalle.Cantidad) + oDetalle.IEPS + oDetalle.Iva)); ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Add(oblDetallePartida); Session["sTotalFactura"] = Convert.ToDecimal(Session["sTotalFactura"]) + Convert.ToDecimal((oDetalle.Precio * oDetalle.Cantidad) + oDetalle.IEPS + oDetalle.Iva); } //Hacer el binding de la data al dgvDatos lblTotal.Text = "TOTAL:$" + Session["sTotalFactura"].ToString(); dgvPartidaDetalle.DataBind(); ////si el estatus es 1 (Pedido) aun se pueden agregar articulos de lo contario ya no //if (oFactura.Estatus == "3") //{ // HabilitaRemision(); // Deshabilita(); //} //else //{ DeshabilitaRemision(); Deshabilita(); //cmbEstatus.Enabled = true; //} } else { //Limpia(); //Deshabilita(); } }
/// <summary> /// Editar /// </summary> private void Editar() { oFactura = new MedDAL.DAL.facturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); oFactura.idFactura = int.Parse(dgvDatos.SelectedDataKey.Value.ToString()); oFactura.Estatus = cmbEstatus.SelectedValue.ToString(); if (oblFacturas.EditarRegistro(oFactura)) { //Datos de la bitacora string sDatosBitacora = string.Empty; sDatosBitacora += "Tipo:" + cmbTipoFactura.SelectedValue.ToString() + " "; sDatosBitacora += "Folio:" + txbFolio.Text + " "; sDatosBitacora += "Fecha:" + txbFecha.Text + " "; sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " "; sDatosBitacora += "Cliente:" + txbCliente.Text + " "; oblFacturas = new MedNeg.Facturas.BlFacturas(); if (oblFacturas.EliminarFacturaPartida(oFactura.idFactura)) { bool bRegistroFallido = false; //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida foreach (MedNeg.Facturas.BlDetallePartida facturaDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]) { oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); oFacturaPartida.idFactura = oFactura.idFactura; oFacturaPartida.idProducto = facturaDetalle.iIdProducto; oFacturaPartida.Cantidad = facturaDetalle.dCantidad; oFacturaPartida.IEPS = facturaDetalle.dIeps; oFacturaPartida.Iva = facturaDetalle.dIva; oFacturaPartida.Precio = facturaDetalle.dPrecio; //Registrar el detalle del pedido if (!oblFacturas.NuevoDetallePartida(oFacturaPartida)) { bRegistroFallido = true; } else { sDatosBitacora += "Producto:" + facturaDetalle.iIdProducto.ToString() + " "; sDatosBitacora += "Cant:" + facturaDetalle.dCantidad.ToString() + " "; sDatosBitacora += "IEPS:" + facturaDetalle.dIeps.ToString() + " "; sDatosBitacora += "Iva:" + facturaDetalle.dIva.ToString() + " "; sDatosBitacora += "Precio:" + facturaDetalle.dPrecio.ToString() + " "; sDatosBitacora += "Total:" + Convert.ToDecimal((facturaDetalle.dCantidad * facturaDetalle.dPrecio) + facturaDetalle.dIeps + facturaDetalle.dIva) + ", "; } } //Anotar en la bitacora la modificación al pedido oBitacora = new MedDAL.DAL.bitacora(); oblBitacora = new MedNeg.Bitacora.BlBitacora(); oBitacora.FechaEntradaSrv = DateTime.Now; oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal oBitacora.Modulo = "Facturas"; oBitacora.Usuario = Session["usuario"].ToString(); oBitacora.Nombre = Session["nombre"].ToString(); oBitacora.Accion = "Edición de Factura"; oBitacora.Descripcion = sDatosBitacora; if (!oblBitacora.NuevoRegistro(oBitacora)) { lblDatos.Text = "El evento no pudo ser registrado en la bitácora"; } } } }
/// <summary> /// Editar /// </summary> private void Editar() { oFactura = new MedDAL.DAL.facturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); //oFactura.idFactura = int.Parse(dgvDatos.SelectedDataKey.Value.ToString()); oFactura = oblFacturas.BuscarFacturasFolio(txbFolio.Text); oFactura.Estatus = cmbEstatus.SelectedValue.ToString(); oblFacturas = new MedNeg.Facturas.BlFacturas(); if(oblFacturas.EditarRegistro(oFactura)) { //Datos de la bitacora string sDatosBitacora = string.Empty; sDatosBitacora += "Tipo:" + cmbTipoFactura.SelectedValue.ToString() + " "; sDatosBitacora += "Folio:" + txbFolio.Text + " "; sDatosBitacora += "Fecha:" + txbFecha.Text + " "; sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " "; sDatosBitacora += "Cliente:" + txbCliente.Text + " "; oblFacturas = new MedNeg.Facturas.BlFacturas(); if (oblFacturas.EliminarFacturaPartida(oFactura.idFactura)) { bool bRegistroFallido = false; //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida foreach (MedNeg.Facturas.BlDetallePartida facturaDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]) { //Saber si es un ensamble el que se esta registrando if (facturaDetalle.bEsEnsamble == true) { AgregarDetalleEnsamble(facturaDetalle, oFactura.idFactura); } else { oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); oFacturaPartida.idFactura = oFactura.idFactura; oFacturaPartida.idProducto = facturaDetalle.iIdProducto; oFacturaPartida.Cantidad = facturaDetalle.dCantidad; oFacturaPartida.IEPS = facturaDetalle.dIeps; oFacturaPartida.Iva = facturaDetalle.dIva; oFacturaPartida.Precio = facturaDetalle.dPrecio; //Registrar el detalle del pedido if (!oblFacturas.NuevoDetallePartida(oFacturaPartida)) { bRegistroFallido = true; } else { sDatosBitacora += "Producto:" + facturaDetalle.iIdProducto.ToString() + " "; sDatosBitacora += "Cant:" + facturaDetalle.dCantidad.ToString() + " "; sDatosBitacora += "IEPS:" + facturaDetalle.dIeps.ToString() + " "; sDatosBitacora += "Iva:" + facturaDetalle.dIva.ToString() + " "; sDatosBitacora += "Precio:" + facturaDetalle.dPrecio.ToString() + " "; sDatosBitacora += "Total:" + Convert.ToDecimal((facturaDetalle.dCantidad * facturaDetalle.dPrecio) + facturaDetalle.dIeps + facturaDetalle.dIva) + ", "; } } } /****** GT: Modificar las existencias de los productos nuevos ***************/ MedNeg.Usuarios.BlUsuarios oblUsuario = new MedNeg.Usuarios.BlUsuarios(); MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios(); oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(Session["usuario"].ToString()); //oblRemision = new MedNeg.Remisiones.BlRemisiones(); oblFacturas = new MedNeg.Facturas.BlFacturas(); foreach (MedNeg.Facturas.BlDetallePartida remisionDetalleNuevos in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstremisionespartidaedicion"]) { oblFacturas.ModificarExistenciaProducto(oUsuario.idAlmacen, remisionDetalleNuevos.iIdProducto, remisionDetalleNuevos.dCantidad, 1); } /****** GT: Modificar las existencias de los productos nuevos ***************/ //Anotar en la bitacora la modificación a la factura oBitacora = new MedDAL.DAL.bitacora(); oblBitacora = new MedNeg.Bitacora.BlBitacora(); oBitacora.FechaEntradaSrv = DateTime.Now; oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal oBitacora.Modulo = "Facturas"; oBitacora.Usuario = Session["usuario"].ToString(); oBitacora.Nombre = Session["nombre"].ToString(); oBitacora.Accion = "Edición de Factura"; oBitacora.Descripcion = sDatosBitacora; if (!oblBitacora.NuevoRegistro(oBitacora)) { lblDatos.Text = "El evento no pudo ser registrado en la bitácora"; } if (oFactura.Estatus == "5") { string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); string sRutaCertificados = Server.MapPath("~/Archivos/"); string[] sUUID = new string[1]; string sMensaje = ""; bool bEncontrado = false; XmlTextReader oXMLReader = new XmlTextReader(sRutaCertificados + "/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".xml"); while (oXMLReader.Read()) { switch (oXMLReader.NodeType) { case XmlNodeType.Element: if (oXMLReader.Name == "tfd:TimbreFiscalDigital") { sUUID[0] = oXMLReader.GetAttribute("UUID"); bEncontrado = true; break; } break; } } if (bEncontrado) { int iResultado = oblFacturas.CancelarFacturaElectronica(sUUID, sRutaCertificados, out sMensaje); if (iResultado == 0) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarCancelacionFacturas(0);", true); System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + sUUID[0] + ".xml")); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); Response.AddHeader("Content-Length", fFactura.Length.ToString()); Response.ContentType = "application/...."; Response.WriteFile(fFactura.FullName); Response.End(); } else if (iResultado == 1) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarCancelacionFacturas(1);", true); } } } } } }
/// <summary> /// Registrar nuevo pedido /// </summary> private void Nuevo() { string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); string sRutaCertificados = Server.MapPath("~/Archivos/"); oFactura = new MedDAL.DAL.facturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); oFactura.idCliente = (int)Session["sIdCliente"]; if ((bool)Session["sEsDePedido"] == true) oFactura.idPedido = (int)Session["sIdPedido"]; if ((bool)Session["sEsDeRemision"] == true) oFactura.idRemision = (int)Session["sIdRemision"]; if ((bool)Session["sEsDeReceta"] == true) oFactura.idReceta = (int)Session["sIdReceta"]; oFactura.TipoFactura = cmbTipoFactura.SelectedValue.ToString(); oFactura.Fecha = DateTime.Now; oFactura.Estatus = cmbEstatus.SelectedValue; //Validar Folio Repetido if (ValidaFolioRepetido()) { //Validar si se esta respetando el folio automatico y verificar si aun es el mismo o cambio su valor if (Session["iFolioAutomatico"].Equals(txbFolio.Text)) { oFactura.Folio = oblFacturas.RecuperaFolioAutomatico(sRutaArchivoConfig).ToString(); } else { oFactura.Folio = txbFolio.Text; } if (oblFacturas.NuevoRegistro(oFactura)) { //Datos de la bitacora string sDatosBitacora = string.Empty; sDatosBitacora += "Tipo:" + cmbTipoFactura.SelectedValue.ToString() + " "; sDatosBitacora += "Folio:" + txbFolio.Text + " "; sDatosBitacora += "Fecha:" + txbFecha.Text + " "; sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " "; sDatosBitacora += "Cliente:" + txbCliente.Text + " "; // Registrar la partida de la remision oFactura = new MedDAL.DAL.facturas(); oFactura = oblFacturas.BuscarFacturasFolio(txbFolio.Text); int iIdFactura = oFactura.idFactura; bool bRegistroFallido = false; //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida foreach (MedNeg.Facturas.BlDetallePartida facturaDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]) { oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); oFacturaPartida.idFactura = iIdFactura; oFacturaPartida.idProducto = facturaDetalle.iIdProducto; oFacturaPartida.Cantidad = facturaDetalle.dCantidad; oFacturaPartida.IEPS = facturaDetalle.dIeps; oFacturaPartida.Iva = facturaDetalle.dIva; oFacturaPartida.Precio = facturaDetalle.dPrecio; oFacturaPartida.Descripcion = facturaDetalle.SProducto; //Registrar el detalle del pedido if (!oblFacturas.NuevoDetallePartida(oFacturaPartida)) { bRegistroFallido = true; } else { sDatosBitacora += "Producto:" + facturaDetalle.iIdProducto.ToString() + " "; sDatosBitacora += "Cant:" + facturaDetalle.dCantidad.ToString() + " "; sDatosBitacora += "IEPS:" + facturaDetalle.dIeps.ToString() + " "; sDatosBitacora += "Iva:" + facturaDetalle.dIva.ToString() + " "; sDatosBitacora += "Precio:" + facturaDetalle.dPrecio.ToString() + " "; sDatosBitacora += "Total:" + Convert.ToDecimal((facturaDetalle.dCantidad * facturaDetalle.dPrecio) + facturaDetalle.dIeps + facturaDetalle.dIva) + ", "; } } //Registrar datos de la remision en la bitacora //lblAviso.Text = "El usuario se ha registrado con éxito"; oBitacora = new MedDAL.DAL.bitacora(); oblBitacora = new MedNeg.Bitacora.BlBitacora(); oBitacora.FechaEntradaSrv = DateTime.Now; oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal oBitacora.Modulo = "Factura"; oBitacora.Usuario = Session["usuario"].ToString(); oBitacora.Nombre = Session["nombre"].ToString(); oBitacora.Accion = "Nueva Factura"; oBitacora.Descripcion = sDatosBitacora; if (!oblBitacora.NuevoRegistro(oBitacora)) { lblDatos.Text = "El evento no pudo ser registrado en la bitácora"; } //Actualizar el consecutivo en la bitacora oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig); //Generar la factura electronica if (cmbModoFactura.SelectedValue == "2") { oblFacturas = new MedNeg.Facturas.BlFacturas(); oblFacturas.GenerarFacturaElectronica(iIdFactura, sRutaCertificados, Session["usuario"].ToString(), (int)Session["sIdCliente"], txbFolio.Text); System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicas/FacturaE-" + txbFolio.Text + ".xml")); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); Response.AddHeader("Content-Length", fFactura.Length.ToString()); Response.ContentType = "application/...."; Response.WriteFile(fFactura.FullName); Response.End(); } //Saber si se va a actualizar el estatus del pedido if ((bool)Session["sEsDePedido"] == true) { //Actualizar el estatus del pedido en caso de que se haya hecho la remision a partir de un pedido MedDAL.DAL.pedidos oPedido = new MedDAL.DAL.pedidos(); MedNeg.Pedidos.BlPedidos oblPedido = new MedNeg.Pedidos.BlPedidos(); //Actualizar el estatus del pedido oPedido = oblPedido.BuscarPedido((int)Session["sIdPedido"]); oPedido.Estatus = "3"; if (!oblPedido.EditarRegistro(oPedido)) { lblDatos.Text = "No se pudo cambiar el estatus del pedido, contacte al administrador"; } } //Saber si se va a actualizar el estatus de la remision if ((bool)Session["sEsDeRemision"] == true) { //Actualizar el estatus del pedido MedDAL.DAL.remisiones oRemision = new MedDAL.DAL.remisiones(); MedNeg.Remisiones.BlRemisiones oblRemision = new MedNeg.Remisiones.BlRemisiones(); oRemision = oblRemision.BuscarRemision((int)Session["sIdRemision"]); oRemision.Estatus = "3"; if (!oblRemision.EditarRegistro(oRemision)) { lblDatos.Text = "No se pudo cambiar el estatus de la remisión, contacte al administrador"; } } //Saber si se va a actualizar el estatus de la remision if ((bool)Session["sEsDeReceta"] == true) { //Actualizar el estatus del pedido MedDAL.DAL.remisiones oRemision = new MedDAL.DAL.remisiones(); MedNeg.Remisiones.BlRemisiones oblRemision = new MedNeg.Remisiones.BlRemisiones(); MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas(); MedNeg.Recetas.BlRecetas oblRecetas = new MedNeg.Recetas.BlRecetas(); oReceta = oblRecetas.BuscarReceta((int)Session["sIdReceta"]); oReceta.Estatus = "2"; if (!oblRecetas.EditarRegistro(oReceta)) { lblDatos.Text = "No se pudo cambiar el estatus de la receta, contacte al administrador"; } } } else { } } else //si es folio repetido { lblDatos.Text = "Folio Repetido, no se puede generar el pedido"; } }
/// <summary> /// Generacion de factura electronica /// </summary> /// <param name="iIdFactura"></param> /// <param name="sRutaArchivos"></param> /// <param name="sUsuario"></param> /// <param name="iIdCliente"></param> /// <param name="?"></param> /// <param name="sFolioFactura"></param> public int GenerarFacturaElectronica(int iIdFactura, string sRutaArchivos, string sUsuario, int iIdCliente, string sFolioFactura) { int iResultado = 0; //Datos de la factura MedNeg.Facturas.BlFacturas oblFactura = new BlFacturas(); MedDAL.DAL.facturas oFactura = new MedDAL.DAL.facturas(); //Datos de la factura oFactura = oblFactura.BuscarFactura(iIdFactura); //Recuperar la partida de la factura List <MedDAL.DAL.facturas_partida> oQuery = new List <MedDAL.DAL.facturas_partida>(); oQuery.AddRange(oblFactura.RecuperarPartidaFactura(oFactura.idFactura)); decimal dSubtotal = 0; decimal dImpuestosTrasladados = 0; decimal dTotal = 0; //Recorrer el resultado de la partida para obtener el total foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { dSubtotal += oDetalle.Cantidad * oDetalle.Precio; dImpuestosTrasladados += (decimal)oDetalle.Iva + (decimal)oDetalle.IEPS; } //Total dTotal = dSubtotal + dImpuestosTrasladados; DateTime dtFechaTest = DateTime.Now; string sNumeroCertificado = ""; string sA, sB, sC; //Leer archivo de configuracion MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion(); MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion(); odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivos + "/Configuracion.xml"); //Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Certificados/aaa010101aaa_csd_06.cer", out sA, out sB, out sC, out sNumeroCertificado); Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaCertificado, out sA, out sB, out sC, out sNumeroCertificado); //Establecer el numero de cuenta string sNumeroCuenta = null; if (oFactura.metodo_pago.MetodoPago.Equals("depósito en cuenta", StringComparison.InvariantCultureIgnoreCase) || oFactura.metodo_pago.MetodoPago.Equals("traspaso", StringComparison.InvariantCultureIgnoreCase)) { sNumeroCuenta = oFactura.NumeroCuentaPago; } //Debo validar la vigencia del certificado con sa <= FechaEmision <= sB #region generarcomprobante //Construir objeto factura Comprobante.ComprobanteFiscalDigital oComprobanteFiscalDigital = new Comprobante.ComprobanteFiscalDigital( "", //Serie sFolioFactura, //Folio dtFechaTest.ToString("yyyy-MM-ddThh:mm:ss"), //Fecha oFactura.tipo_forma_pago.FormaPago, //FormaDePago sNumeroCertificado, //NoCertificado "", //"Condiciones de pago", dSubtotal.ToString(), //SubTotal "0", //Descuento "", //Motivo del descuento dTotal.ToString(), //Total oFactura.metodo_pago.MetodoPago, //Metodo de pago "Ingreso", //Tipo de comprobante null, //noAprobacion null, //anoAprobacion "3.2", //version null, //TipoCambio null, //Moneda odalConfiguracion.sEstado + "," + odalConfiguracion.sMunicipio, //LugarExpedicion sNumeroCuenta //NumCtaPago ); //Pendiente la parte de pagos parciales //Empresa o razon social y direccion fiscal Comprobante.t_Emisor Emisor = new Comprobante.t_Emisor( odalConfiguracion.sRfc, odalConfiguracion.sRazonSocial, odalConfiguracion.sDomicilio, //Calle "", //No exterior "", //No interior "", //Colonia "", //Localidad "", //Emisor Referencia odalConfiguracion.sMunicipio, odalConfiguracion.sEstado, odalConfiguracion.sPais, odalConfiguracion.sCodigoPostal ); Emisor.addRegimenFiscal(odalConfiguracion.sRegimenFiscal); oComprobanteFiscalDigital.setEmisor(Emisor); //Establece la expedición de la factura, se toman lo datos del almacen MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios(); MedNeg.Usuarios.BlUsuarios oblUsuario = new Usuarios.BlUsuarios(); oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(sUsuario); oComprobanteFiscalDigital.setExpedicion( oUsuario.almacenes.Calle.ToString(), //Calle oUsuario.almacenes.NumeroExt.ToString(), //NoExt "", //NoInt oUsuario.almacenes.colonias.Nombre, //Colonia oUsuario.almacenes.poblaciones.Nombre.ToString(), //Población "", //Emisor Referencia Expedicion oUsuario.almacenes.municipios.Nombre.ToString(), //Municipio oUsuario.almacenes.estados.Nombre.ToString(), //Estado oUsuario.almacenes.Pais.ToString(), //Pais oUsuario.almacenes.CodigoPostal.ToString()); //CP //Establecer los datos del cliente MedDAL.DAL.clientes oCliente = new MedDAL.DAL.clientes(); MedNeg.BlClientes.BlClientes oblClientes = new BlClientes.BlClientes(); oCliente = oblClientes.BuscarCliente(iIdCliente); oComprobanteFiscalDigital.setReceptor( oCliente.Rfc.ToString(), //RFC oCliente.Nombre.ToString() + " " + oCliente.Apellidos.ToString(), //Nombre oCliente.Calle.ToString(), //Calle oCliente.NumeroExt.ToString(), //No ext oCliente.NumeroInt.ToString(), //No int oCliente.colonias.Nombre.ToString(), //Colo oCliente.poblaciones.Nombre.ToString(), //Ciudad "", //ReferenciaReceptor oCliente.municipios.Nombre.ToString(), //Municipio oCliente.estados.Nombre.ToString(), //Estado "Mexico", //Pais oCliente.CodigoPostal.ToString() //Codigo postal ); //Recorrer el resultado de la partida para obtener el total foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { string Cantidad, Codigo, Descripcion, Unidad, PrecioUnitario, Importe, ImporteNeto; decimal dImporte = 0; Cantidad = oDetalle.Cantidad.ToString(); //Codigo = oDetalle.productos.Clave1.ToString(); //Descripcion = oDetalle.productos.Nombre.ToString(); //0087 Identificar si es un producto o un ensamble if (oDetalle.idEnsamble.Equals(null)) { //Datos del producto Codigo = oDetalle.productos.Clave1.ToString(); } else { //Datos del ensamble Codigo = oDetalle.ensamble.ClaveBom.ToString(); } Descripcion = oDetalle.Descripcion.ToString(); Unidad = oDetalle.productos.UnidadMedida; PrecioUnitario = oDetalle.Precio.ToString(); dImporte = oDetalle.Cantidad * oDetalle.Precio; Importe = dImporte.ToString(); Comprobante.Concepto C = new Comprobante.Concepto( Cantidad, Unidad, Codigo, Descripcion, PrecioUnitario, Importe); oComprobanteFiscalDigital.addConcepto(C);//aqui agregas el elemento a la partida } #endregion //Commpruebo que sea válido if (oComprobanteFiscalDigital.Valido() == true) { string sCadenaOriginal = oComprobanteFiscalDigital.CadenaOriginal(); oComprobanteFiscalDigital.Sellar(sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaLlave.ToString(), sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaCertificado.ToString(), odalConfiguracion.sContraseña.ToString()); oComprobanteFiscalDigital.XML().Save(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml"); //return a.XML(); /* * Modificaciones de POJO: 1 de Noviembre 2011 : Agregando el webservice para timbrado, guardaré los archivos en /Facturacion/Timbrados/ */ FacturaService.TimbradoClient svcT = new FacturaService.TimbradoClient(); FacturaService.RespuestaCFDi RespuestaCFDi = new FacturaService.RespuestaCFDi(); //Aquí, cambiar la funcion a svcT.Timbrar cuando vayan a mostrarlo en producción, de otra manera, no serán válidos los cfdi's que emitan. try { byte [] aArchivo = File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml"); RespuestaCFDi = svcT.Timbrar("pojo", "a", aArchivo); File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml", RespuestaCFDi.Documento); RespuestaCFDi = svcT.PDF("pojo", "a", File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml"), null); File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".pdf", RespuestaCFDi.Documento); return(0); } catch (System.Net.WebException ex) { //Sale cuando no encuentra al server return(1); } catch (System.Web.Services.Protocols.SoapHeaderException ex) { return(3); } catch (Exception ex) { //Para excepciones no conocidas return(4); } /* * Falta: Revisar errores con PAC (¿Cómo los regresas? ¿Qué pasa si algo está mal? ¿el xml fue correctamente construido?¿Una función nueva?) */ } else { //Sale cuando el certificado no es valido return(2); } }
/// <summary> /// BL - Nuevo registro /// </summary> /// <param name="oFactura"></param> /// <returns></returns> public bool NuevoRegistro(MedDAL.DAL.facturas oFactura) { return(odalFacturas.NuevoRegistro(oFactura)); }
public bool Timbrar(int iIdFactura) { string sRutaCertificados = Server.MapPath("~/Archivos/"); oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas oDALFacturas = new MedDAL.DAL.facturas(); string sDatosBitacora = string.Empty; oFactura = new MedDAL.DAL.facturas(); oFactura = oblFacturas.BuscarFactura(iIdFactura); int iResultado = oblFacturas.GenerarFacturaElectronica(iIdFactura, sRutaCertificados, Session["usuario"].ToString(), oFactura.idCliente, oFactura.Folio); if (iResultado == 0) { oblFacturas.CrearZip(new string[] { Server.MapPath("~/Archivos/FacturasElectronicasTimbradas"), Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".zip") }, Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".xml"), Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".pdf")); ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(0);", true); System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".zip")); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); Response.AddHeader("Content-Length", fFactura.Length.ToString()); Response.ContentType = "application/...."; Response.WriteFile(fFactura.FullName); Response.End(); } else if (iResultado == 1) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(1);", true); } else if (iResultado == 2) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(2);", true); } else if (iResultado == 3) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(3);", true); } else if (iResultado == 4) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(4);", true); } return true; }
/// <summary> /// Editar Factura /// </summary> /// <param name="oFactura"></param> /// <returns></returns> public bool EditarRegistro(MedDAL.DAL.facturas oFactura) { return(odalFacturas.EditarRegistro(oFactura)); }
/// <summary> /// 2013/03/10 Jorge Ibarra /// Crea una instancia de factura, la guarda, y en caso de ser electrónica la procesa para ser timbrada /// </summary> private bool AddFactura() { string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); MedDAL.Facturas.DALFacturas oDALFacturas = new MedDAL.Facturas.DALFacturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); oFactura = SetObjetoFactura(); //Coloca la partida en la factura y además resta las existencias en el almacén correspondiente if (!SetObjetoFacturaPartida(ref oFactura, oDALFacturas.MedicuriEntities)) { Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(Ha ocurrido un error: \n" + oDALFacturas.GetError() + ")", true); return false; } if (!oDALFacturas.Add(oFactura, oDALFacturas.MedicuriEntities)) { Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(Ha ocurrido un error: \n" + oDALFacturas.GetError() + ")", true); return false; } //Saber si se va a actualizar el estatus del pedido if ((bool)Session["sEsDePedido"] == true) { oFactura.pedidos.Estatus = "3"; } //Saber si se va a actualizar el estatus de la remision if ((bool)Session["sEsDeRemision"] == true) { oFactura.remisiones.Estatus = "3"; } //Saber si se va a actualizar el estatus de la remision if ((bool)Session["sEsDeReceta"] == true) { oFactura.recetas.Estatus = "2"; } if (oDALFacturas.SaveChanges(oDALFacturas.MedicuriEntities)) { oBitacora = new MedDAL.DAL.bitacora(); oblBitacora = new MedNeg.Bitacora.BlBitacora(); oBitacora.FechaEntradaSrv = DateTime.Now; oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal oBitacora.Modulo = "Factura"; oBitacora.Usuario = Session["usuario"].ToString(); oBitacora.Nombre = Session["nombre"].ToString(); oBitacora.Accion = "Nueva Factura"; oBitacora.Descripcion = sDatosBitacora; if (!oblBitacora.NuevoRegistro(oBitacora)) { lblDatos.Text = "El evento no pudo ser registrado en la bitácora"; } oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig); return true; } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert(Ha ocurrido un error: \n" + oDALFacturas.GetError() + ")", true); return false; } }
/// <summary> /// 2013/03/10 Jorge Ibarra /// Carga los datos que debe de contener un objeto factura /// </summary> /// <returns></returns> private MedDAL.DAL.facturas SetObjetoFactura() { string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); if (Session["ObjetoFactura"] == null) { oFactura = new MedDAL.DAL.facturas(); } else { oFactura = (MedDAL.DAL.facturas)Session["ObjetoFactura"]; } oFactura.idCliente = (int)Session["sIdCliente"]; if ((bool)Session["sEsDePedido"] == true) oFactura.idPedido = (int)Session["sIdPedido"]; if ((bool)Session["sEsDeRemision"] == true) oFactura.idRemision = (int)Session["sIdRemision"]; if ((bool)Session["sEsDeReceta"] == true) oFactura.idReceta = (int)Session["sIdReceta"]; oFactura.TipoFactura = cmbTipoFactura.SelectedValue.ToString(); oFactura.Fecha = DateTime.Now; oFactura.FechaAplicacion = DateTime.Now; oFactura.Estatus = cmbEstatus.SelectedValue; oFactura.idUsuario = Convert.ToInt32(Session["usuarioid"]); oFactura.Vendedor = Session["nombre"].ToString(); //2013 02 19 Nuevos campos para factura 3.2 oFactura.idMetodoPago = Convert.ToInt32(cmbMetodoPago.SelectedValue); oFactura.idTipoFormaPago = Convert.ToInt32(cmbFormaPago.SelectedValue); oFactura.NumeroCuentaPago = txbCuentaPago.Text; //Validar si se esta respetando el folio automatico y verificar si aun es el mismo o cambio su valor if (Session["iFolioAutomatico"].Equals(txbFolio.Text)) { oFactura.Folio = oblFacturas.RecuperaFolioAutomatico(sRutaArchivoConfig).ToString(); } else { oFactura.Folio = txbFolio.Text; } //2013/03/10 JID Se colocan los datos que van a la bitácora sDatosBitacora += "Tipo:" + cmbTipoFactura.SelectedValue.ToString() + " "; sDatosBitacora += "Folio:" + txbFolio.Text + " "; sDatosBitacora += "Fecha:" + txbFecha.Text + " "; sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " "; sDatosBitacora += "Cliente:" + txbCliente.Text + " "; return oFactura; }
private void Reimprimir(int iIdFactura) { oblFacturas = new MedNeg.Facturas.BlFacturas(); oFactura = new MedDAL.DAL.facturas(); oFactura = oblFacturas.BuscarFactura(iIdFactura); if (System.IO.File.Exists(Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".zip"))) { System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFactura.Folio + ".zip")); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); Response.AddHeader("Content-Length", fFactura.Length.ToString()); Response.ContentType = "application/...."; Response.WriteFile(fFactura.FullName); Response.End(); } else { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(5);", true); } }
/// <summary> /// funcion que crea una factura nueva sin gastos de administracion /// </summary> /// <param name="sFolio"></param> /// <param name="iTipo">1-Tradicional, 2-Electronica</param> /// <returns></returns> private void CrearFactura(List<MedNeg.Facturas.BlDetalleFacturaReceta> lstDetalleFactura, int iTipo) { //TODO: GT Paso 3: Generar la factura con todo lo contabilizado de las recetas que van a conformar esta factura. //objeto que contiene la receta string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml"); string sRutaCertificados = Server.MapPath("~/Archivos/"); string sFacturaAdicional = ""; string sFacturaAdicional2 = ""; MedDAL.DAL.recetas oReceta = new MedDAL.DAL.recetas(); MedNeg.Recetas.BlRecetas oblReceta = new MedNeg.Recetas.BlRecetas(); MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion(); MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion(); MedDAL.DAL.facturas oFacturas = new MedDAL.DAL.facturas(); MedNeg.Facturas.BlFacturas oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.FacturacionDeRecetas oFacturacionRecetas = new MedDAL.DAL.FacturacionDeRecetas(); decimal dSubtotal = 0; int idReceta = 0; odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig); //ID Cliente oFacturas.idCliente = (int)Session["sIdCliente"]; //IDRECETA //oFacturas.idReceta = oReceta.idReceta; //Asiganr el folio de la factura if (odalConfiguracion.iFacturasAutomatico == 1) { oFacturas.Folio = odalConfiguracion.iFolioFacturas++.ToString(); } else { string sFolioAux; sFolioAux = "FxR" + DateTime.Now.ToShortDateString() + iContadorFacturas.ToString(); //Validar que no exista el folio while (!ValidaFolioRepetido(sFolioAux)) sFolioAux = "FxR" + DateTime.Now.ToShortDateString() + iContadorFacturas++.ToString(); oFacturas.Folio = sFolioAux; } string sIdFolioFactura=oFacturas.Folio; //Fecha oFacturas.Fecha = DateTime.Now; oFacturas.FechaAplicacion = DateTime.Now; //tipo (4 por que son de receta) oFacturas.TipoFactura = "4"; //Estatus (3 de emitida) oFacturas.Estatus = "3"; //Id del usuario que genero la factura oFacturas.idUsuario = Convert.ToInt32(Session["usuarioid"]); //Nombre del vendedor que en este caso es el usuario oFacturas.Vendedor = Session["nombre"].ToString(); //Registrar la factura if (oblFacturas.NuevoRegistro(oFacturas)) { oFacturas = new MedDAL.DAL.facturas(); oblFacturas = new MedNeg.Facturas.BlFacturas(); ////Recuperar el id de la factura crea| da oFacturas = oblFacturas.BuscarFacturasFolio(sIdFolioFactura); //Actualizar el consecutivo en la configuracion oblFacturas.ActualizarFolioFactura(sRutaArchivoConfig); iContadorFacturas++; //Insertar el detalle de factura //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida foreach (MedNeg.Facturas.BlDetalleFacturaReceta renglon in lstDetalleFactura) { oblFacturas = new MedNeg.Facturas.BlFacturas(); MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); oFacturaPartida.idFactura = oFacturas.idFactura; oFacturaPartida.idProducto = renglon.iIdProducto; oFacturaPartida.Cantidad = renglon.dCantidad; oFacturaPartida.IEPS = renglon.dIeps; oFacturaPartida.Iva = renglon.dIva; oFacturaPartida.Precio = renglon.dPrecio; //Registrar el detalle del pedido if (!oblFacturas.NuevoDetallePartida(oFacturaPartida)) { //bRegistroFallido = true; } else { //Guardar el monto de las lineas MedNeg.Facturas.BlFacturacionDeLineas oblFacturacionLinea = new MedNeg.Facturas.BlFacturacionDeLineas(); oblFacturacionLinea.DMonto = oFacturaPartida.Cantidad * oFacturaPartida.Precio; oblFacturacionLinea.DtFecha = DateTime.Now; oblFacturacionLinea.IIdLineaCredito = renglon.IIdLineaCredito; lstTotalFacturadoPorLinea.Add(oblFacturacionLinea); //Guardar el subtotal para cuando sea una facturacion de Gtos. Admon por subtotales dSubtotal += oFacturaPartida.Cantidad * oFacturaPartida.Precio; //Modificar el estatus de la receta if (idReceta != renglon.IIdReceta) { MedDAL.DAL.recetas oRecetaEditar = new MedDAL.DAL.recetas(); MedNeg.Recetas.BlRecetas oblRecetas = new MedNeg.Recetas.BlRecetas(); oRecetaEditar.idReceta = renglon.IIdReceta; oRecetaEditar.Estatus = "2"; oblRecetas = new MedNeg.Recetas.BlRecetas(); oblRecetas.EditarRegistro(oRecetaEditar); idReceta = renglon.IIdReceta; } //TODO: Paso 3.1 Aqui generar la factura electronica de las recetas facturadas } } if (iTipo == 2) { oblFacturas = new MedNeg.Facturas.BlFacturas(); oblFacturas.GenerarFacturaElectronica(oFacturas.idFactura, sRutaCertificados, Session["usuario"].ToString(), (int)Session["sIdCliente"], oFacturas.Folio); } ///TODO /// Mandar a imprimir la de gastos de administración por renglones o por subtotales /// 1 = Renglones, 2 = Sub totales /// //TODO: GT Paso 4: una vez generada una factura y segun como eligio el usuario se debe de hacer una factura de tipo Gasto administrativo o por sub totales A LA PAR DE LA FACTURA EMITIDA, es regla de negocio por eso por cada factura siempre existiran 2 if (chkPanelGtosAdmon.Checked == true) { if (rblGenerarFacturaTipo.SelectedValue == "1") { sFacturaAdicional = CrearFacturaGtoAdministrativo(sIdFolioFactura, lstDetalleFactura); sFacturaAdicional2 = sFacturaAdicional.Replace(".xml", ".pdf"); } if (rblGenerarFacturaTipo.SelectedValue == "2") { //Generar la factura agregandole el monto a la factura sFacturaAdicional = CrearFacturaSubTotales(sIdFolioFactura, dSubtotal); sFacturaAdicional2 = sFacturaAdicional.Replace(".xml", ".pdf"); dSubtotal = 0; } } //Gurdar en la base de datos lo facturado por linea de credito foreach (MedNeg.Facturas.BlFacturacionDeLineas registro in lstTotalFacturadoPorLinea) { oFacturacionRecetas.idLineaCredito = registro.IIdLineaCredito; oFacturacionRecetas.Fecha = registro.DtFecha; oFacturacionRecetas.Monto = registro.dMonto; oblFacturas = new MedNeg.Facturas.BlFacturas(); //MedDAL.DAL.facturas_partida oFacturaPartida = new MedDAL.DAL.facturas_partida(); //Registrar el renglon de lo facturado if(!oblFacturas.NuevoRegistroFacturacionReceta(oFacturacionRecetas)) { //bRegistroFallido = true; } } if (iTipo == 2) { try { oblFacturas.CrearZip(new string[] { Server.MapPath("~/Archivos/FacturasElectronicasTimbradas"), Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".zip") }, Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".xml"), Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".pdf"), sFacturaAdicional, sFacturaAdicional2); ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarFacturas(0);", true); System.IO.FileInfo fFactura = new System.IO.FileInfo(Server.MapPath("~/Archivos/FacturasElectronicasTimbradas/FacturaE-" + oFacturas.Folio + ".zip")); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + fFactura.Name); Response.AddHeader("Content-Length", fFactura.Length.ToString()); Response.ContentType = "application/...."; Response.WriteFile(fFactura.FullName); Response.End(); } catch (Exception) { ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarExcepcion(0);", true); } } } }
protected void cmbEstatusCobranza_SelectedIndexChanged(object sender, EventArgs e) { //Recuperar el id de la factura seleccionada y mandar el nuevo estatus MedDAL.DAL.facturas oFacturas = new MedDAL.DAL.facturas(); MedNeg.Facturas.BlFacturas oblFacturas = new MedNeg.Facturas.BlFacturas(); oFacturas = oblFacturas.BuscarFacturasFolio(dgvDatos.SelectedRow.Cells[4].Text); oFacturas.Estatus = ((DropDownList)dgvDatos.SelectedRow.Cells[8].FindControl("cmbEstatusCobranza")).SelectedValue; //Actualizar la fecha de aplicación oFacturas.FechaAplicacion = DateTime.Now; if (oblFacturas.EditarRegistro(oFacturas)) { lblAviso.Text = "La aplicación de la factura:" + dgvDatos.SelectedRow.Cells[4].Text + " fue correcta."; //Datos de la bitacora string sDatosBitacora = string.Empty; sDatosBitacora += "Folio:" + oFacturas.Folio + " "; sDatosBitacora += "Estatus Cambiado A: " + ((DropDownList)dgvDatos.SelectedRow.Cells[8].FindControl("cmbEstatusCobranza")).SelectedItem.ToString() + " "; sDatosBitacora += "Cliente:" + oFacturas.clientes.Nombre + " "+ oFacturas.clientes.Apellidos+" "; sDatosBitacora += "RFC:" + oFacturas.clientes.Rfc; //Registrar en la bitacora RegistrarEnBitacora(sDatosBitacora); MostrarLista(); } else { lblAviso.Text = "La aplicación de la factura:" + dgvDatos.SelectedRow.Cells[4].Text + " fue incorrecta, por favor intentelo de nuevo."; MostrarLista(); } }
/// <summary> /// Generacion de factura electronica /// </summary> /// <param name="iIdFactura"></param> /// <param name="sRutaArchivos"></param> /// <param name="sUsuario"></param> /// <param name="iIdCliente"></param> /// <param name="?"></param> /// <param name="sFolioFactura"></param> public int GenerarFacturaElectronica(int iIdFactura, string sRutaArchivos, string sUsuario,int iIdCliente,string sFolioFactura) { int iResultado = 0; //Datos de la factura MedNeg.Facturas.BlFacturas oblFactura = new BlFacturas(); MedDAL.DAL.facturas oFactura = new MedDAL.DAL.facturas(); //Datos de la factura oFactura = oblFactura.BuscarFactura(iIdFactura); //Recuperar la partida de la factura List<MedDAL.DAL.facturas_partida> oQuery = new List<MedDAL.DAL.facturas_partida>(); oQuery.AddRange(oblFactura.RecuperarPartidaFactura(oFactura.idFactura)); decimal dSubtotal = 0; decimal dImpuestosTrasladados = 0; decimal dTotal = 0; //Recorrer el resultado de la partida para obtener el total foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { dSubtotal += oDetalle.Cantidad * oDetalle.Precio; dImpuestosTrasladados += (decimal)oDetalle.Iva + (decimal)oDetalle.IEPS; } //Total dTotal = dSubtotal + dImpuestosTrasladados; DateTime dtFechaTest = DateTime.Now; string sNumeroCertificado = ""; string sA, sB, sC; //Leer archivo de configuracion MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion(); MedDAL.Configuracion.DALConfiguracion odalConfiguracion = new MedDAL.Configuracion.DALConfiguracion(); odalConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivos+"/Configuracion.xml"); //Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Certificados/aaa010101aaa_csd_06.cer", out sA, out sB, out sC, out sNumeroCertificado); Comprobante.SelloDigital.leerCER(sRutaArchivos + "/Facturacion/"+odalConfiguracion.sRutaCertificado, out sA, out sB, out sC, out sNumeroCertificado); //Establecer el numero de cuenta string sNumeroCuenta = null; if (oFactura.metodo_pago.MetodoPago.Equals("depósito en cuenta", StringComparison.InvariantCultureIgnoreCase) || oFactura.metodo_pago.MetodoPago.Equals("traspaso", StringComparison.InvariantCultureIgnoreCase)) { sNumeroCuenta = oFactura.NumeroCuentaPago; } //Debo validar la vigencia del certificado con sa <= FechaEmision <= sB #region generarcomprobante //Construir objeto factura Comprobante.ComprobanteFiscalDigital oComprobanteFiscalDigital = new Comprobante.ComprobanteFiscalDigital( "", //Serie sFolioFactura, //Folio dtFechaTest.ToString("yyyy-MM-ddThh:mm:ss"), //Fecha oFactura.tipo_forma_pago.FormaPago, //FormaDePago sNumeroCertificado, //NoCertificado "",//"Condiciones de pago", dSubtotal.ToString(), //SubTotal "0",//Descuento "",//Motivo del descuento dTotal.ToString(), //Total oFactura.metodo_pago.MetodoPago, //Metodo de pago "Ingreso", //Tipo de comprobante null, //noAprobacion null, //anoAprobacion "3.2", //version null,//TipoCambio null, //Moneda odalConfiguracion.sEstado + "," + odalConfiguracion.sMunicipio, //LugarExpedicion sNumeroCuenta //NumCtaPago ); //Pendiente la parte de pagos parciales //Empresa o razon social y direccion fiscal Comprobante.t_Emisor Emisor = new Comprobante.t_Emisor( odalConfiguracion.sRfc, odalConfiguracion.sRazonSocial, odalConfiguracion.sDomicilio, //Calle "", //No exterior "", //No interior "", //Colonia "", //Localidad "",//Emisor Referencia odalConfiguracion.sMunicipio, odalConfiguracion.sEstado, odalConfiguracion.sPais, odalConfiguracion.sCodigoPostal ); Emisor.addRegimenFiscal(odalConfiguracion.sRegimenFiscal); oComprobanteFiscalDigital.setEmisor(Emisor); //Establece la expedición de la factura, se toman lo datos del almacen MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios(); MedNeg.Usuarios.BlUsuarios oblUsuario = new Usuarios.BlUsuarios(); oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(sUsuario); oComprobanteFiscalDigital.setExpedicion( oUsuario.almacenes.Calle.ToString(),//Calle oUsuario.almacenes.NumeroExt.ToString(),//NoExt "", //NoInt oUsuario.almacenes.colonias.Nombre, //Colonia oUsuario.almacenes.poblaciones.Nombre.ToString(), //Población "",//Emisor Referencia Expedicion oUsuario.almacenes.municipios.Nombre.ToString(),//Municipio oUsuario.almacenes.estados.Nombre.ToString(),//Estado oUsuario.almacenes.Pais.ToString(),//Pais oUsuario.almacenes.CodigoPostal.ToString());//CP //Establecer los datos del cliente MedDAL.DAL.clientes oCliente = new MedDAL.DAL.clientes(); MedNeg.BlClientes.BlClientes oblClientes = new BlClientes.BlClientes(); oCliente = oblClientes.BuscarCliente(iIdCliente); oComprobanteFiscalDigital.setReceptor( oCliente.Rfc.ToString(), //RFC oCliente.Nombre.ToString() + " " + oCliente.Apellidos.ToString(), //Nombre oCliente.Calle.ToString(), //Calle oCliente.NumeroExt.ToString(), //No ext oCliente.NumeroInt.ToString(),//No int oCliente.colonias.Nombre.ToString(),//Colo oCliente.poblaciones.Nombre.ToString(),//Ciudad "",//ReferenciaReceptor oCliente.municipios.Nombre.ToString(),//Municipio oCliente.estados.Nombre.ToString(),//Estado "Mexico",//Pais oCliente.CodigoPostal.ToString() //Codigo postal ); //Recorrer el resultado de la partida para obtener el total foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { string Cantidad, Codigo, Descripcion, Unidad, PrecioUnitario, Importe, ImporteNeto; decimal dImporte=0; Cantidad = oDetalle.Cantidad.ToString(); //Codigo = oDetalle.productos.Clave1.ToString(); //Descripcion = oDetalle.productos.Nombre.ToString(); //0087 Identificar si es un producto o un ensamble if (oDetalle.idEnsamble.Equals(null)) { //Datos del producto Codigo = oDetalle.productos.Clave1.ToString(); } else { //Datos del ensamble Codigo = oDetalle.ensamble.ClaveBom.ToString(); } Descripcion = oDetalle.Descripcion.ToString(); Unidad = oDetalle.productos.UnidadMedida; PrecioUnitario = oDetalle.Precio.ToString(); dImporte=oDetalle.Cantidad * oDetalle.Precio; Importe = dImporte.ToString(); Comprobante.Concepto C = new Comprobante.Concepto( Cantidad, Unidad, Codigo, Descripcion, PrecioUnitario, Importe); oComprobanteFiscalDigital.addConcepto(C);//aqui agregas el elemento a la partida } #endregion //Commpruebo que sea válido if (oComprobanteFiscalDigital.Valido() == true) { string sCadenaOriginal = oComprobanteFiscalDigital.CadenaOriginal(); oComprobanteFiscalDigital.Sellar(sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaLlave.ToString(), sRutaArchivos + "/Facturacion/" + odalConfiguracion.sRutaCertificado.ToString(), odalConfiguracion.sContraseña.ToString()); oComprobanteFiscalDigital.XML().Save(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml"); //return a.XML(); /* * Modificaciones de POJO: 1 de Noviembre 2011 : Agregando el webservice para timbrado, guardaré los archivos en /Facturacion/Timbrados/ */ FacturaService.TimbradoClient svcT = new FacturaService.TimbradoClient(); FacturaService.RespuestaCFDi RespuestaCFDi = new FacturaService.RespuestaCFDi(); //Aquí, cambiar la funcion a svcT.Timbrar cuando vayan a mostrarlo en producción, de otra manera, no serán válidos los cfdi's que emitan. try { byte [] aArchivo = File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicas/FacturaE-" + sFolioFactura + ".xml"); RespuestaCFDi = svcT.Timbrar("pojo", "a", aArchivo); File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml", RespuestaCFDi.Documento); RespuestaCFDi = svcT.PDF("pojo", "a", File.ReadAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".xml"), null); File.WriteAllBytes(sRutaArchivos + "/FacturasElectronicasTimbradas/FacturaE-" + sFolioFactura + ".pdf", RespuestaCFDi.Documento); return 0; } catch (System.Net.WebException ex) { //Sale cuando no encuentra al server return 1; } catch (System.Web.Services.Protocols.SoapHeaderException ex) { return 3; } catch (Exception ex) { //Para excepciones no conocidas return 4; } /* * Falta: Revisar errores con PAC (¿Cómo los regresas? ¿Qué pasa si algo está mal? ¿el xml fue correctamente construido?¿Una función nueva?) */ } else { //Sale cuando el certificado no es valido return 2; } }
/// <summary> /// Cargar los datos del pedido y su partida /// </summary> /// <param name="bDatos"></param> protected void CargarFormulario(bool bDatos) { pnlFormulario.Visible = true; pnlCatalogo.Visible = false; pnlFiltroReportes.Visible = false; if (bDatos) { //Objeto que contiene el id del pedido oblFacturas = new MedNeg.Facturas.BlFacturas(); oFactura = new MedDAL.DAL.facturas(); oFactura = (MedDAL.DAL.facturas)oblFacturas.BuscarFactura(int.Parse(dgvDatos.SelectedDataKey[0].ToString())); //Llenar los campos de la factura txbFolio.Text = oFactura.Folio; if (oFactura.idPedido.Equals(null)) txbPedido.Text = ""; else txbPedido.Text = oFactura.pedidos.Folio.ToString(); if (oFactura.idRemision.Equals(null)) txbRemision.Text = ""; else txbRemision.Text = oFactura.remisiones.Folio.ToString(); if (oFactura.idReceta.Equals(null)) txbReceta.Text = ""; else txbReceta.Text = oFactura.recetas.Folio.ToString(); txbFecha.Text = oFactura.Fecha.ToShortDateString(); int iContador = 0; cmbEstatus.SelectedIndex = -1; foreach (ListItem elemento in cmbEstatus.Items) { if (elemento.Value.Equals(oFactura.Estatus.ToString())) { elemento.Selected = true; } iContador++; } cmbTipoFactura.SelectedIndex = -1; iContador = 0; foreach (ListItem elemento in cmbTipoFactura.Items) { if (elemento.Value.Equals(oFactura.TipoFactura.ToString())) { elemento.Selected = true; } iContador++; } //Llenar los campos del cliente txbCliente.Text = oFactura.clientes.Nombre + " " + oFactura.clientes.Apellidos; txbDireccion.Text = oFactura.clientes.Calle + " " + oFactura.clientes.NumeroExt; if (oFactura.clientes.NumeroInt != null) { txbDireccion.Text += "Int: " + oFactura.clientes.NumeroInt; } txbPoblacion.Text = oFactura.clientes.poblaciones.Nombre.ToString() + ", " + oFactura.clientes.municipios.Nombre.ToString() +", " + oFactura.clientes.estados.Nombre.ToString(); //Lenar los datos de la partida del detalle oblFacturas = new MedNeg.Facturas.BlFacturas(); //Recuperar la partida del pedido List<MedDAL.DAL.facturas_partida> oQuery = new List<MedDAL.DAL.facturas_partida>(); oQuery.AddRange(oblFacturas.RecuperarPartidaFactura(oFactura.idFactura)); //Session["lstDetallePartida"] = new List<MedNeg.Facturas.BlDetallePartida>(); if (((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Count() > 0) { ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Clear(); } //Recorrer el resultado y meterlo al datagridview Session["sTotalFactura"] = 0; //0087 Variables para gestionar la carga de datos del producto o del ensamble string sClave; string sNombre; bool bEsEnsamble; foreach (MedDAL.DAL.facturas_partida oDetalle in oQuery) { //0087 Identificar si es un producto o un ensamble if (oDetalle.idEnsamble.Equals(null)) { //Datos del producto sClave = oDetalle.productos.Clave1; sNombre = oDetalle.productos.Nombre; bEsEnsamble = false; } else { //Datos del ensamble sClave = oDetalle.ensamble.ClaveBom; sNombre = oDetalle.ensamble.Descripcion; bEsEnsamble = true; } oblDetallePartida = new MedNeg.Facturas.BlDetallePartida( Convert.ToInt32(oDetalle.idProducto), //0087 Comentar para enviar las variables correspondientes que tienen la info del producto o ensamble //oDetalle.productos.Clave1, //oDetalle.productos.Nombre, sClave, sNombre, oDetalle.Cantidad, Convert.ToDecimal(oDetalle.IEPS), Convert.ToDecimal(oDetalle.Iva), Convert.ToDecimal(oDetalle.Precio), oDetalle.Observaciones, Convert.ToDecimal((oDetalle.Precio * oDetalle.Cantidad)+oDetalle.IEPS+oDetalle.Iva), oDetalle.Descripcion, bEsEnsamble //0087 ); ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Add(oblDetallePartida); Session["sTotalFactura"] = Convert.ToDecimal(Session["sTotalFactura"]) + Convert.ToDecimal((oDetalle.Precio * oDetalle.Cantidad) + oDetalle.IEPS + oDetalle.Iva); } //Hacer el binding de la data al dgvDatos lblTotal.Text = "TOTAL:$" + Session["sTotalFactura"].ToString(); dgvPartidaDetalle.DataBind(); //si el estatus es 1 (Pedido) aun se pueden agregar articulos de lo contario ya no if (oFactura.Estatus == "3") { HabilitaRemision(); Deshabilita(); } else { DeshabilitaRemision(); Deshabilita(); } } else { Session["lstDetallePartidaPedidos"] = new List<MedNeg.Facturas.BlDetallePartida>(); dgvPartidaDetalle.DataSource = ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartidaPedidos"]); dgvPartidaDetalle.DataBind(); //Limpia(); //Deshabilita(); } }