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