public HttpResponseMessage construirDocumentoExcel([FromUri] int?cuentaBancariaID, [FromBody] ConstruirExcelCollections construirDocExcel_Collections) { if (!User.Identity.IsAuthenticated) { var errorResult = new { errorFlag = true, resultMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } try { // -------------------------------------------------------------------------------------------------------------------------- // establecemos una conexión a mongodb string contabm_mongodb_connection = System.Web.Configuration.WebConfigurationManager.AppSettings["contabm_mongodb_connectionString"]; string contabM_mongodb_name = System.Web.Configuration.WebConfigurationManager.AppSettings["contabM_mongodb_name"]; var client = new MongoClient(contabm_mongodb_connection); // var server = client.GetServer(); // nótese como el nombre de la base de datos mongo (de contabM) está en el archivo webAppSettings.config; en este db se registran las vacaciones var mongoDataBase = client.GetDatabase(contabM_mongodb_name); // vamos a leer todas las compañías y ponerlas en una lista ... la cuenta bancaria (default) para cada compañía, será buscada allí ... var companiasMongoCollection = mongoDataBase.GetCollection <Compania_mongodb>("Compania"); var mongoQuery = from e in companiasMongoCollection.AsQueryable <Compania_mongodb>() select e; List <Compania_mongodb> companias = mongoQuery.ToList(); // ----------------------------------------------------------------------------------------------------------------- // preparamos el documento Excel, para tratarlo con ClosedXML ... string fileName = System.Web.HttpContext.Current.Server.MapPath("~/Excel/Plantillas/InstruccionesPagoAlBanco/InstruccionesPagoAlBanco.xlsx"); XLWorkbook wb; IXLWorksheet ws; try { wb = new XLWorkbook(fileName); ws = wb.Worksheet(1); } catch (Exception ex) { string errorMessage = ex.Message; if (ex.InnerException != null) { errorMessage += "<br />" + ex.InnerException.Message; } var errorResult = new { errorFlag = true, resultMessage = errorMessage }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } var excelTable = ws.Table("Facturas"); // ----------------------------------------------------------------------------------------------------------------- int cantidadRows = 0; foreach (var factura in construirDocExcel_Collections.FacturasSeleccionadas_List) { cantidadRows++; excelTable.DataRange.LastRow().Field(0).SetValue(factura.companiaID); excelTable.DataRange.LastRow().Field(1).SetValue(factura.compania); excelTable.DataRange.LastRow().Field(2).SetValue(new DateTime(factura.fechaRecepcion.Year, factura.fechaRecepcion.Month, factura.fechaRecepcion.Day)); excelTable.DataRange.LastRow().Field(3).SetValue(factura.numeroFactura); excelTable.DataRange.LastRow().Field(4).SetValue(factura.numeroControl); excelTable.DataRange.LastRow().Field(5).SetValue(factura.concepto); excelTable.DataRange.LastRow().Field(6).SetValue(factura.montoNoImponible); excelTable.DataRange.LastRow().Field(7).SetValue(factura.montoImponible); excelTable.DataRange.LastRow().Field(8).SetValue(factura.Iva); excelTable.DataRange.LastRow().Field(9).SetValue(factura.totalFactura); excelTable.DataRange.LastRow().Field(10).SetValue(factura.montoPagado); excelTable.DataRange.LastRow().Field(11).SetValue(factura.montoAPagar); excelTable.DataRange.InsertRowsBelow(1); } // ---------------------------------------------------------- // ahora escribimos registros a otra tabla en el documento ws = wb.Worksheet(2); excelTable = ws.Table("Pagos"); cantidadRows = 0; foreach (var pago in construirDocExcel_Collections.ResumenFacturas_List) { cantidadRows++; excelTable.DataRange.LastRow().Field(0).SetValue(pago.companiaID); excelTable.DataRange.LastRow().Field(1).SetValue(pago.compania); excelTable.DataRange.LastRow().Field(2).SetValue(pago.cantidadFacturasAPagar); excelTable.DataRange.LastRow().Field(3).SetValue(pago.tipoPersona + '-' + pago.numeroRif); excelTable.DataRange.LastRow().Field(4).SetValue(pago.nombreBeneficiario); excelTable.DataRange.LastRow().Field(5).SetValue(pago.codigoBanco); excelTable.DataRange.LastRow().Field(6).SetValue(pago.numeroCuentaBancaria); excelTable.DataRange.LastRow().Field(7).SetValue(new DateTime(pago.fechaValor.Year, pago.fechaValor.Month, pago.fechaValor.Day)); excelTable.DataRange.LastRow().Field(8).SetValue(pago.monto); excelTable.DataRange.InsertRowsBelow(1); } BancosEntities context = new BancosEntities(); string nombreCiaContab = ""; string rifCiaContab = ""; CuentasBancaria cuentaBancaria = context.CuentasBancarias.Where(cta => cta.CuentaInterna == cuentaBancariaID).FirstOrDefault(); if (cuentaBancaria != null) { ContabSysNet_Web.ModelosDatos_EF.Bancos.Compania ciaContab = context.Companias.Where(cia => cia.Numero == cuentaBancaria.Cia).FirstOrDefault(); nombreCiaContab = ciaContab.Nombre; rifCiaContab = ciaContab.Rif; } ws = wb.Worksheet(1); ws.Cell("B2").Value = nombreCiaContab; ws.Cell("B3").Value = "Rif: " + rifCiaContab; string userName = User.Identity.Name.Replace("@", "_").Replace(".", "_"); fileName = System.Web.HttpContext.Current.Server.MapPath("~/Excel/InstruccionesPagoAlBanco_" + userName + ".xlsx"); if (File.Exists(fileName)) { File.Delete(fileName); } wb.SaveAs(fileName); var errorResult2 = new { errorFlag = false, resultMessage = "Ok, el documento Excel se ha construído en forma satisfactoria.<br />" + "Por favor haga un click en la opción que le permite descargar (download) el documento a su computador." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult2)); } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } var errorResult = new { errorFlag = true, resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } }
public HttpResponseMessage leerDatosCompanias([FromUri] int?cuentaBancariaID, [FromBody] List <ResumenFacturas> resumenFacturas) { if (!User.Identity.IsAuthenticated) { var errorResult = new { errorFlag = true, resultMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } try { // -------------------------------------------------------------------------------------------------------------------------- // establecemos una conexión a mongodb string contabm_mongodb_connection = System.Web.Configuration.WebConfigurationManager.AppSettings["contabm_mongodb_connectionString"]; string contabM_mongodb_name = System.Web.Configuration.WebConfigurationManager.AppSettings["contabM_mongodb_name"]; var client = new MongoClient(contabm_mongodb_connection); // var server = client.GetServer(); // nótese como el nombre de la base de datos mongo (de contabM) está en el archivo webAppSettings.config; en este db se registran las vacaciones var mongoDataBase = client.GetDatabase(contabM_mongodb_name); // vamos a leer todas las compañías y ponerlas en una lista ... la cuenta bancaria (default) para cada compañía, será buscada allí ... var companiasMongoCollection = mongoDataBase.GetCollection <Compania_mongodb>("Compania"); var mongoQuery = from e in companiasMongoCollection.AsQueryable <Compania_mongodb>() select e; List <Compania_mongodb> companias = mongoQuery.ToList(); // -------------------------------------------------------------------------------------------------------------------------- BancosEntities context = new BancosEntities(); // antes que nada, leemos la cuenta bancaria y los datos de la cia contab ... ContabSysNet_Web.ModelosDatos_EF.Bancos.Compania ciaContab = null; CuentasBancaria cuentaBancariaCiaContab = null; string codigoBancoCiaContab = ""; if (cuentaBancariaID != null) { cuentaBancariaCiaContab = context.CuentasBancarias.Where(cta => cta.CuentaInterna == cuentaBancariaID).FirstOrDefault(); if (cuentaBancariaCiaContab != null) { ciaContab = context.Companias.Where(cia => cia.Numero == cuentaBancariaCiaContab.Cia).FirstOrDefault(); codigoBancoCiaContab = cuentaBancariaCiaContab.Agencia1.Banco1.Codigo; } } foreach (var c in resumenFacturas) { Proveedore compania = context.Proveedores.Include("Personas").Where(p => p.Proveedor == c.companiaID).FirstOrDefault(); if (compania != null) { c.tipoPersona = compania.Rif != null?compania.Rif.Substring(0, 1) : ""; c.numeroRif = compania.Rif != null?compania.Rif.Substring(1, compania.Rif.Length - 1) : ""; Persona persona = compania.Personas.Where(p => p.DefaultFlag.HasValue && p.DefaultFlag.Value).FirstOrDefault(); if (persona != null) { c.nombreBeneficiario = persona.Nombre + ' ' + persona.Apellido; c.email = persona.email; c.celular = persona.Celular; // solo si la persona posee un Rif registrado, lo usamos if (!string.IsNullOrEmpty(persona.Rif)) { c.tipoPersona = persona.Rif != null?persona.Rif.Substring(0, 1) : ""; c.numeroRif = persona.Rif != null?persona.Rif.Substring(1, persona.Rif.Length - 1) : ""; } } // buscamos la compañía en la lista que leímos desde mongo var compania2 = companias.Where(x => x.Id == c.companiaID).FirstOrDefault(); if (compania2 != null && compania2.cuentasBancarias.Any(x => x.isDefault)) { var cuentaBancaria = compania2.cuentasBancarias.Where(x => x.isDefault).FirstOrDefault(); var banco = context.Bancos.Where(b => b.Banco1 == cuentaBancaria.banco).FirstOrDefault(); c.numeroCuentaBancaria = cuentaBancaria.numero; c.codigoBanco = banco != null ? banco.Codigo : null; c.modalidadPago = ""; if (!(cuentaBancaria.tipo == "VI" || cuentaBancaria.tipo == "MA" || cuentaBancaria.tipo == "AM")) { // la cuenta no es una tarjeta; es una cuenta de ahorros o corriente if (c.codigoBanco == codigoBancoCiaContab) { // cuentas del mismo banco (que nuestro banco) c.modalidadPago = "CTA"; } else { // cuenta de difenrente banco (a nuestro banco) c.modalidadPago = "BAN"; } } else { // tarjetas de crédito if (cuentaBancaria.tipo == "AM") { c.modalidadPago = "AME"; } else if (c.codigoBanco == codigoBancoCiaContab) { // visa/master mismo banco c.modalidadPago = "V/M"; } else { // visa/master otros bancos c.modalidadPago = "TAR"; } } } } } var registroCiaContab = new { tipoRegistro = "01", descripcionLote = "Proveedores", tipoPersona = ciaContab.Rif != null?ciaContab.Rif.Substring(0, 1) : "", numeroRif = ciaContab.Rif != null?ciaContab.Rif.Replace("-", "").Substring(1, ciaContab.Rif.Replace("-", "").Length - 1) : "", numeroContrato = cuentaBancariaCiaContab.NumeroContrato, numeroLote = 0, fechaEnvio = DateTime.Today, cantidadOperaciones = resumenFacturas.Count(), montoTotal = resumenFacturas.Sum(f => f.monto), moneda = "VEB" }; var result = new { errorFlag = false, resultMessage = "", resumenFacturas = resumenFacturas, registroCiaContab }; return(Request.CreateResponse(HttpStatusCode.OK, result)); } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } var errorResult = new { errorFlag = true, resultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } }